Whats wrong with coding
2 次查看(过去 30 天)
显示 更早的评论
hi , I am trying to implement Image enhancement algorithm Dynamic Quadrant Histogram Equalization Plateau limit
I am trying to implement its first part please have a look on following code whats wrong in this code
clear;
clc;
p=imread('pout.tif');p=p(:,:,1);
h=imhist(p);
[m,n]=size(p);
Pic=zeros(m,n);
N=m*n;
max1=double(max(p(:)));
min1=double(min(p(:)));
aa=p;
ch=cumsum(h);
m0=min1;
m1=floor(0.25*(N));
m2=floor(0.5*(N));
m3=floor(0.75*(N));
m4=max1;
m=[m0 m1 m2 m3 m4];
L=256;
n0=0;
n1=m2*((m1-m0)/(m2-m0));
n2=m2;
n3=((L-1-m2)*((m3-m2)/(m4-m2)))+m2;
n4=L-1;
for j=0:4
a=sum(h(m(j):m(j+1)));
P(j)=a./(m(j+1)-m(j));
P(j)=h(h>P(j)); % clipped Histogram
M(j)=sum(P(m(j):m(j+1))); % total of Clipped histogram
Y(aa==j)=n(j+1)+(n(j+1)-n(j))*(P(j)./M(j)); %Transform function
end
imshow(Y)
following is the link to paper
2 个评论
Walter Roberson
2013-12-16
How does the output you get differ from your expectation? Are you receiving an error message? What does pout.tif look like?
回答(2 个)
David Sanchez
2013-12-17
In your code
for j=0:4
a=sum(h(m(j):m(j+1)));
...
...
the index starts at j=0, which is not matlab's way of handling an array. It should start in 1.
m(j) for j=0, will return an error since m(0) (the 0th element of the array) does not exist.
3 个评论
Image Analyst
2013-12-17
You will find out after you look at this. Basically it's saying that m is negative, zero, or have some fractional part and that it's not strictly integers like it should be. I don't know why - I didn't run the code - but you will after you look at the link I gave and step through your code line by line and examine variables.
Image Analyst
2013-12-17
编辑:Image Analyst
2013-12-17
OK, that's a different error than you originally had. If h is the histogram, then h has only 256 bins (elements). So why are you trying to set m=[25,15500,31000,46500,255]???? There is no 15500 bins so why are you trying to access it?
Try this:
m0=min1;
m1=floor(0.25*(max1-min1)+min1);
m2=floor(0.5*(max1-min1)+min1);
m3=floor(0.75*(max1-min1)+min1);
m4=max1;
3 个评论
Image Analyst
2013-12-17
Try this:
m0=min1;
m1=floor(0.25*(max1-min1)+min1);
m2=floor(0.5*(max1-min1)+min1);
m3=floor(0.75*(max1-min1)+min1);
m4=max1;
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!