我有这段Matlab代码。请帮助我诊断问题,为什么我没有得到均衡图像的平直图,因为我们使用histeq()函数。
clc,clear
%Image Read
orig=imread('gun.jpg');
orig=rgb2gray(orig);
[r, c]=size(orig);
%Image Equlization using histeq()
equal_he=histeq(orig);
imhist(equal_he);
%Manually equalizing the image using HE algorithm%%
hist_orig=imhist(orig); %Finding histogram
pdf_hist=hist_orig/numel(orig); %Probability density histogram
cdf_hist=cumsum(pdf_hist); %cumulative density histogram
%Finding Equalized image
equal(find(orig(orig<256)+1)) = 235*cdf_hist(orig(orig<256)+1);
equal=uint8(reshape(equal,r,c));
figure,imhist(equal);
此代码为我提供了以下结果
histeq
答案 0 :(得分:2)
让我们假设一个连续的随机变量X
,其值在0
和255
区间以及大小512x512
之内,如本文所述,代表在这个例子中:
>> X = randi(256, 512, 512) - 1;
>> X = uint8(X);
如果我们将此随机变量显示为图像,我们有:
>> imshow(X)
如果我们检查它的直方图,我们可以看到每个强度等级的值几乎相同,并且该范围内的所有值都用值填充。这样我们就可以假设我们的图像的直方图已经标准化了:
>> figure , imhist(X, 256)
对于这种特殊情况,我们可以说我们的随机变量X
具有统一的密度。所以,p(x) = 1 / (X_max - X_min)
意味着对于每个强度值,发生的概率是相等的(但请注意,对于我们的例子,这不是真的,考虑到每个强度等级的值的数量之间的微小差异,无论如何,它&#39} ;非常接近)。
>> X_max = 255;
>> X_min = 0;
>> p = 1/(X_max + X_min)
p =
0.0039
如果您绘制每个值的概率的累积和,您可以看到这非常接近:
>> figure , bar(p .* [0:255])
>> figure , bar(cumsum(imhist(X, 256)) ./ numel(X))
现在我们知道我们的示例案例非常接近理想情况,让我们计算最终的等式:
&#34;很容易证明直方图均衡的输出图像的平均亮度是中间灰度级。&#34;
>> (X_min + X_max) / 2
ans =
127.5000
>> mean(X(:))
ans =
127.5381
正如您所看到的,即使图像非常接近理想情况(每个像素值具有理论上相等的概率),这些值也不相同但非常接近。因此,这就是方程式显示连续随机变量的推导而非离散的原因。
希望这有助于您更好地理解您的问题。请务必再次阅读@rayryeng关于您的问题的精彩评论,他们非常有帮助,可以引导您回答。