Whats wrong with coding

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 Comments

How does the output you get differ from your expectation? Are you receiving an error message? What does pout.tif look like?
I am receiving error
Subscript indices must either be real positive integers or logicals.
Error in DQHE (line 32)
a=sum(h(m(jj):m(jj+1)));
Pout.tif should be somewhat enhanced than from original image in brightness and contrast. And actually I am not receiving output but error.

Sign in to comment.

Answers (2)

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 Comments

for jj=1:5
a=sum(h(m(jj):m(jj+1)));
...
..
I did the above statement but still the error persists, do you think is there anyother problem
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.
Thanks for The video, I try it but I can not figure it out
m=[25,15500,31000,46500,255]
for jj=1:length(m)
a=sum(h(m(jj:jj+1));
infact following equation in the paper
here m is the above matrix and h is the input histogram if I debug it is like that I am accessing element that is out of bounds e.g. h(53334) where numel(h)=255. So How can I solve this issue please see where I am wrong

Sign in to comment.

Image Analyst
Image Analyst on 17 Dec 2013
Edited: Image Analyst on 17 Dec 2013
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 Comments

great Analyst,
You got my problem, So infact in paper there is equation that separate the histogram into 4 parts, with following equation
and my problem is that m1 m2 m2 are so big values because of following code
N=m*n;
m1=floor(0.25*(N)));
m2=floor(0.5*(N));
m3=floor(0.75*(N));
I need to normalize these values first between 0-255 then may be my problem could be shaped. Still need your sugesstions
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;
Analyst, can also see this that am I writing wrong or right here for the following
first Equation is for clipping the histogram, second is the transform function, and third is the total of clipped histogram
for jj=1:5
a=a+h(m(jj));
P(jj)=a./(m(jj));
h(h(jj)>P(jj))=P(jj); % Clipped Histogram
M(jj)=sum(h(h(jj)>P(jj)));%total of Clipped histogram
aa(p==jj)=n(jj)+(n(jj)-n(jj))*(P(jj)./M(jj)); %Transform function
end
following images are resultant if I do it with above coding I think Something Still wrong with my code first one Original and Last Equalized with algorithm,
However accoding paper result should be like this

Sign in to comment.

Asked:

on 16 Dec 2013

Edited:

on 18 Dec 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!