Histogram normalization of two images using IHS
Show older comments
I want a matlab code that will normalize one image taking other as reference using IHS I already have the seperate I, H and S components. I have to compute standard deviation and mean of H and S and then determine a new value and assign to H and S of target image. My code yields an error
clear;
clc;
img_a = imread('E:\TM\tanya\img3.tif');%reference
img_b = imread('E:\TM\tanya\img4.tif');%Target
%computing components for Target image
[r c] = size(img_a);
img_b_re = imresize(img_b,[r c],'bilinear');
img_b=im2double(img_b);
r=img_b(:,:,1);
g=img_b(:,:,2);
b=img_b(:,:,3);
th=acos((0.5*((r-g)+(r-b)))./((sqrt((r-g).^2+(r-b).*(g-b)))+eps));
H=th;
H(b>g)=2*pi-H(b>g);
H=H/(2*pi);
S=1-3.*(min(min(r,g),b))./(r+g+b+eps);
I=(r+g+b)/3;
hsi=cat(3,H,S,I);
HE=H*2*pi;
HE=histeq(HE);
HE=HE/(2*pi);
SE=histeq(S);
IE=histeq(I);
%figure, imshow(hsi),title('HSI Image');
img_b_re_hsi = hsi;
I = img_b_re_hsi(:,:,3);
hespc = imhist(I);
%RV=cat(3,HE,SE,IE);
% C=hsitorgb(RV);
% figure, imshow(C),title('RGB Image-HSI Normalized target image');
%computing components for reference image
img_a=im2double(img_a);
[r c] = size(img_b);
img_a_re = imresize(img_a,[r c],'bilinear');
r1=img_a(:,:,1);
g1=img_a(:,:,2);
b1=img_a(:,:,3);
th1=acos((0.5*((r1-g1)+(r1-b1)))./((sqrt((r1-g1).^2+(r1-b1).*(g1-b1)))+eps));
H1=th1;
H1(b1>g1)=2*pi-H(b1>g1);
H1=H1/(2*pi);
S1=1-3.*(min(min(r1,g1),b1))./(r1+g1+b1+eps);
I1=(r1+g1+b1)/3;
hsi1=cat(3,H1,S1,I1);
HE1=H1*2*pi;
HE1=histeq(HE1);
HE1=HE1/(2*pi);
SE1=histeq(S1);
IE1=histeq(I1);
%figure, imshow(hsi1),title('HSI Image 1');
img_a_re_hsi = hsi1;
I = img_a_re_hsi(:,:,3);
hespc1 = imhist(I1);
SH=std(H);
%M=mean(H);
% SH1=std(H1);
SS=std(S);
%MS=mean(S);
meanIm=mean([H(:) ; H1(:)]);
meanSat=mean([S(:) ; S1(:)]);
%SS1=std(S1);
Hnew = (SH*100)/meanIm;
Snew = (SS*100)/meanSat;
hsinew = cat(3,Hnew,Snew,I1);
figure, imshow(S3),title('IHS normalised RGB Image');
figure,imshow(img_a),title('Original');
C=hsitorgb(hsinew);
figure, imshow(C),title('RGB Image');
ERROR: ??? Error using ==> cat CAT arguments dimensions are not consistent.
Error in ==> Histonorm at 70 hsinew = cat(3,Hnew,Snew,I1);
Accepted Answer
More Answers (0)
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!