Histogram normalization of two images using IHS
Afficher commentaires plus anciens
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);
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur Image Arithmetic 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!