Matlab:使用imhist()和相同大小的bin

时间:2015-11-26 13:33:40

标签: matlab grayscale

我使用Matlab和OpenCV生成灰度直方图,分为10个区间。

在OpenCV中,每个bin具有相等的范围(即[0,25],[26,51],[52,77],...)。

然而,在Matlab中,bin大小不相等(我猜它与某些理论有关,它们对较低和较高值之间的强度变化的敏感度不同)。

这些不同的结果对我来说是个大麻烦。

是否可以选择使用具有相同bin大小的calcHist? (当然除了自己实施的选项......)

1 个答案:

答案 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