Histogram normalization of two images using IHS

6 ビュー (過去 30 日間)
Tanya
Tanya 2014 年 5 月 11 日
コメント済み: Image Analyst 2014 年 5 月 12 日
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);

採用された回答

Image Analyst
Image Analyst 2014 年 5 月 11 日
Well, what are the dimension/sizes of Hnew, Snew, and I1? They all have to match since they are going to be 2D slices out of a 3D image.
  3 件のコメント
Tanya
Tanya 2014 年 5 月 12 日
The error still persist
Image Analyst
Image Analyst 2014 年 5 月 12 日
Please attach your images.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeGet Started with Image Processing Toolbox についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by