我使用Matlab和OpenCV生成灰度直方图,分为10个区间。
在OpenCV中,每个bin具有相等的范围(即[0,25],[26,51],[52,77],...)。
然而,在Matlab中,bin大小不相等(我猜它与某些理论有关,它们对较低和较高值之间的强度变化的敏感度不同)。
这些不同的结果对我来说是个大麻烦。
是否可以选择使用具有相同bin大小的calcHist
? (当然除了自己实施的选项......)
答案 0 :(得分:1)
通过自我实现的功能回答我自己的问题:
function h = fixedSizeBinnedHist(grayImg, numBins)
binSize = 256 / numBins;
binnedImg = floor(double(grayImg) / binSize);
maxVal = max(binnedImg(:));
numLeadingZeros = min(binnedImg(:));
numTrailingZeros = numBins - maxVal - 1;
% First, computing histogram for the existing range
h = hist(double(binnedImg(:)), maxVal - numLeadingZeros + 1);
leading = zeros(1, numLeadingZeros);
trailing = zeros(1, numTrailingZeros);
% Finally attaching needed zeros in both sides, so the histogram is in the requested size
h = [leading h trailing];
end