Я написал код для выравнивания гистограммы цветного изображения. Код отлично работает для изображения с серой шкалой, но он вызывает ошибку для цветного изображения. Я конвертирую изображение rgb в hsv, а затем выполняю выравнивание гистограммы. Есть идеи об этом?Matlab: индекс должен быть положительным целым числом или логическим
Код:
% 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'. В окне Command введите 'class (GIm)' и 'max (GIm (:))'. Вероятно, вы заметите, что тип данных HSV (класс) равен ** double **, а максимальное значение равно 1. И поэтому все значения пикселей находятся в интервале [0,1], и сообщение об ошибке имеет смысл. Также проверьте размеры изображений RGB и HSV. В отличие от двух измерений для изображений в оттенках серого могут быть три измерения. Возможно, ваш код будет обновлен, чтобы справиться с этим. – Geoff
Я не уверен, как бы вы создали гистограмму - пожалуй, одну для каждой из компонентов оттенка, насыщенности и значения (изображения HSV), разделяющую интервал [0,1] на фиксированное количество ячеек. Например, [0,0,1], [0,1, 0,2), ..., [0,8,0,9], [0,9,1] могут быть десятью ячейками, которые вы попытаетесь «заполнить». Хотя вы, вероятно, хотите значительно больше из них (это всего лишь пример). – Geoff