Matlab:将 imhist() 与大小相等的箱一起使用
Matlab: Using imhist() with equal-sized bins
我同时使用 Matlab 和 OpenCV 生成灰度直方图,分为 10 个 bin。
在 OpenCV 中,每个 bin 具有相等的范围(即 [0,25]、[26,51]、[52,77]、...)。
然而,在 Matlab 中,bin 大小不相等(我猜这与一些关于强度变化在较低值和较高值之间的不同敏感性的理论有关)。
这些不同的结果让我很烦恼。
是否可以选择使用 calcHist
具有相同的 bin 大小? (当然除了自己实现的选项...)
用自己实现的函数回答我自己的问题:
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
我同时使用 Matlab 和 OpenCV 生成灰度直方图,分为 10 个 bin。
在 OpenCV 中,每个 bin 具有相等的范围(即 [0,25]、[26,51]、[52,77]、...)。
然而,在 Matlab 中,bin 大小不相等(我猜这与一些关于强度变化在较低值和较高值之间的不同敏感性的理论有关)。
这些不同的结果让我很烦恼。
是否可以选择使用 calcHist
具有相同的 bin 大小? (当然除了自己实现的选项...)
用自己实现的函数回答我自己的问题:
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