Array Indices Error In Histogram Equalisation
Afficher commentaires plus anciens
%Practical 6 Histogram Equalisation
close all;
clear all;
clc;
a=imread('HG.jpg');
a1=double(a);
a2=rgb2gray(uint8(a1));
[row, col]=size(a2);
c=row*col;
h=zeros(1,300);
z=zeros(1,300);
for m = 1:1:row
for n = 1:1:col
t=a2(m,n);
h(t+1)=h(t+1)+1;
end
end
pdf=h/c;
cdf(1)=pdf(1);
for x=2:1:256
cdf(x)=pdf(x)+cdf(x-1);
end
new=round(cdf*256);
new=new+1;
for p=1:1:row
for q=1:1:col
temp=a2(p,q);
b(p,q)=new(temp);
t=b(p,q);
z(t+1)=z(t+1)+1;
end
end
b=b-1;
subplot(2,2,1)
imshow(uint8(a2))
title('Original Image');
subplot(2,2,2)
bar(h)
title('Histogram of Original Image');
subplot(2,2,3)
imshow(uint8(b))
title('Histogrammed Image');
subplot(2,2,4)
bar(z)
title('Eq. Histogram');
Error:
Array indices must be positive integers or logical values.
Error in Equal (line 28)
b(p,q)=new(temp);
Réponses (1)
Walter Roberson
le 20 Jan 2023
Modifié(e) : Walter Roberson
le 20 Jan 2023
a=imread('HG.jpg');
a1=double(a);
a2=rgb2gray(uint8(a1));
the result of the above should be uint8 because the input is uint8 -- but the output values can include 0.
for p=1:1:row
for q=1:1:col
temp=a2(p,q);
b(p,q)=new(temp);
the a2 values can include 0, so temp can be 0, so new(temp) could be an attempt to index new at index 0.
Caution: you cannot just use new(temp+1) as that risks adding 1 to uint8(255) which does not give 256 and instead gives 255.
Catégories
En savoir plus sur Histograms dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!