image thumbnail
from Iterative nth power/root image equalization by Gholamreza (Shahab) Anbarjafari
This is an image equalization code....

itr_n_power_colour.m
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This code has been written in Spring 2008 by me, Gholamreza Anbarjafari
% (Shahab). You can use this code for any research and academic purposes as
% far as you refer to the following work:
%      Hasan Demirel and Gholamreza Anbarjafari, "HSI Based Colour Image 
%      Equalization using Iterative nth Root and nth Power",  5th International 
%      Conference on Electrical and Computer Systems (EECS08), November 27-28, 
%      2008, Lefke, North Cyprus.
% Feel free to contact us for any furthur information:
%  {hasan.demirel, shahab.jafari}@emu.edu.tr
%   http://faraday.ee.emu.edu.tr/shahab
%   http://faraday.ee.emu.edu.tr/hdemirel
%   (c) Demirel and Anbarjafari -2008
% 
% The iterative proposed method for equalization is based on achieving a
% normalized image with mean of 0.5 in R, G and B channels. 
% A new image X in a colour channel can be obtained by using this equation:
% X = X^teta; where teta =ln (0.5)/ln (mean-of-X); 
% one can easi;y calculate the PSNR using the calcpsnr commend avaiable in
% this address: http://www.mathworks.com/matlabcentral/fileexchange/22241 
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
close all
clear memory
i=(imread('im2_1.jpg'));
id=im2double(i);
id1=im2double(imread('im2.jpg'));
[sx,sy]=size(id);
id_cool=im2double(i);
cnt=1;
id_coolr=id_cool(:,:,1);
m(cnt)=mean(mean(id_coolr));
y=sum(sum((im2double(id1(:,:,1))-im2double(id_coolr)).^2))/(sx*sy);
p(cnt)=10*log10(255*255/y); 
while (abs(m(cnt)-0.5)>0.0009)
    id_coolr=id_coolr.^(log(0.5)/log(m(cnt)));
    cnt=cnt+1;
    m(cnt)=mean(mean(id_coolr));
    y=sum(sum((im2double(id1(:,:,1))-im2double(id_coolr)).^2))/(sx*sy);
    p(cnt)=10*log10(255*255/y); 
    clear memory
end
[a,b]=max(p);
clear id_cool m
id_cool=im2double(i);
id_coolr=id_cool(:,:,1);
m=mean(mean(id_coolr));
for q=1:b-1
    id_coolr=id_coolr.^(log(0.5)/log(m));
    m=mean(mean(id_coolr));
end
Nid_cool(:,:,1)=uint8(id_coolr*255);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear m cnt y p
cnt=1;
id_coolr=id_cool(:,:,2);
m(cnt)=mean(mean(id_coolr));
y=sum(sum((im2double(id1(:,:,2))-im2double(id_coolr)).^2))/(sx*sy);
p(cnt)=10*log10(255*255/y); 
while (abs(m(cnt)-0.5)>0.0009)
    id_coolr=id_coolr.^(log(0.5)/log(m(cnt)));
    cnt=cnt+1;
    m(cnt)=mean(mean(id_coolr));
    y=sum(sum((im2double(id1(:,:,2))-im2double(id_coolr)).^2))/(sx*sy);
    p(cnt)=10*log10(255*255/y); 
    clear memory
end
[a,b]=max(p);
clear id_cool m
id_cool=im2double(i);
id_coolr=id_cool(:,:,2);
m=mean(mean(id_coolr));
for q=1:b-1
    id_coolr=id_coolr.^(log(0.5)/log(m));
    m=mean(mean(id_coolr));
end
Nid_cool(:,:,2)=uint8(id_coolr*255);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear m cnt y p
cnt=1;
id_coolr=id_cool(:,:,3);
m(cnt)=mean(mean(id_coolr));
y=sum(sum((im2double(id1(:,:,3))-im2double(id_coolr)).^2))/(sx*sy);
p(cnt)=10*log10(255*255/y); 
while (abs(m(cnt)-0.5)>0.0009)
    id_coolr=id_coolr.^(log(0.5)/log(m(cnt)));
    cnt=cnt+1;
    m(cnt)=mean(mean(id_coolr));
    y=sum(sum((im2double(id1(:,:,3))-im2double(id_coolr)).^2))/(sx*sy);
    p(cnt)=10*log10(255*255/y); 
    clear memory
end
[a,b]=max(p);
clear id_cool m
id_cool=im2double(i);
id_coolr=id_cool(:,:,3);
m=mean(mean(id_coolr));
for q=1:b-1
    id_coolr=id_coolr.^(log(0.5)/log(m));
    m=mean(mean(id_coolr));
end
Nid_cool(:,:,3)=uint8(id_coolr*255);
ieq(:,:,1)=histeq(i(:,:,1));ieq(:,:,2)=histeq(i(:,:,2));ieq(:,:,3)=histeq(i(:,:,3));
subplot(221);imshow(i);xlabel('Given');subplot(222);imshow(id1);xlabel('Original')
subplot(223);imshow(Nid_cool);xlabel('mine');subplot(224);imshow(ieq);xlabel('HistEq')

Contact us at files@mathworks.com