【发布时间】:2014-09-04 01:46:21
【问题描述】:
我为彩色图像的直方图均衡编写了代码。该代码适用于灰度图像,但它会引发彩色图像错误。我正在将 rgb 图像转换为 hsv,然后执行直方图均衡。有什么想法吗?
代码:
% GIm=imread('tire.tif'); this is grayscale image, which works fine
I=imread('D:\came.jpg');
GIm=rgb2hsv(I);% converting color image to hsv
numofpixels=size(GIm,1)*size(GIm,2);
figure,imshow(GIm);
title('Original Image');
HIm=uint8(zeros(size(GIm,1),size(GIm,2)));
freq=zeros(256,1);
probf=zeros(256,1);
probc=zeros(256,1);
cum=zeros(256,1);
output=zeros(256,1);
%freq counts the occurrence of each pixel value.
%The probability of each occurrence is calculated by probf.
for i=1:size(GIm,1)
for j=1:size(GIm,2)
value=GIm(i,j);
freq(value+1)=freq(value+1)+1; % giving error here
probf(value+1)=freq(value+1)/numofpixels;
end
end
sum=0;
no_bins=255;
%The cumulative distribution probability is calculated.
for i=1:size(probf)
sum=sum+freq(i);
cum(i)=sum;
probc(i)=cum(i)/numofpixels;
output(i)=round(probc(i)*no_bins);
end
for i=1:size(GIm,1)
for j=1:size(GIm,2)
HIm(i,j)=output(GIm(i,j)+1);
end
end
figure,imshow(HIm);
title('Histogram equalization');
subplot(2,2,2);
plot(GIm);
%bar(GIm);
title('Before Histogram equalization');
subplot(2,2,4);
plot(HIm)
%bar(HIm);
title('After Histogram equalization');
错误:
Attempted to access freq(1.61378); index must be a positive integer or logical.
Error in histogramequ (line 18)
freq(value+1)=freq(value+1)+1;
【问题讨论】:
-
James - 仔细查看 HSV 图像,
GIm。在命令行窗口中输入class(GIm)和max(GIm(:))。您可能会注意到 HSV 数据类型(类)是 double 并且最大值是 1。因此所有像素值都在区间 [0,1] 中,并且错误消息使感觉。还要检查 RGB 和 HSV 图像的尺寸。与灰度图像的二维不同,可能存在三个维度。您的代码可能需要更新以处理此问题。 -
我不确定您将如何创建直方图 - 可能每个(HSV 图像的)色调、饱和度和值分量将 [0,1] 区间拆分为固定数字箱。例如,[0,0.1), [0.1, 0.2), ...,[0.8,0.9), [0.9,1] 可能是您尝试“填充”的十个箱子。尽管您可能想要更多(这只是一个示例)。
标签: matlab image-processing histogram