用2023a版matlab写一段将四副256*256的灰度图像I1、I2、I3、I4进行图像归一化处理,图像归一化的原理是:首先计算并确定原始图像对各种仿射变换具有较强不变性的图像矩,然后根据得到的图像矩确定变换函数的具体参数,最后利用变换函数将原始图像转换为具有标准形式的图像,其归一化过程主要包括4个步骤:平移归一化、X-shear归一化、Y-shear归一化和缩放归一化,原始图像在经过以上四个步骤后,便能够转化为标准图像,从而能够降低仿射变换对图像的影响
时间: 2023-11-04 09:15:16 浏览: 25
好的,以下是用2023a版matlab实现四幅灰度图像的归一化处理的代码:
```matlab
% 读入四幅灰度图像
I1 = imread('image1.jpg');
I2 = imread('image2.jpg');
I3 = imread('image3.jpg');
I4 = imread('image4.jpg');
% 平移归一化
I1 = imtranslate(I1, -mean(mean(I1)));
I2 = imtranslate(I2, -mean(mean(I2)));
I3 = imtranslate(I3, -mean(mean(I3)));
I4 = imtranslate(I4, -mean(mean(I4)));
% X-shear归一化
m1 = moment(I1, 1, 1);
m2 = moment(I2, 1, 1);
m3 = moment(I3, 1, 1);
m4 = moment(I4, 1, 1);
sx1 = m1(2)/m1(1);
sx2 = m2(2)/m2(1);
sx3 = m3(2)/m3(1);
sx4 = m4(2)/m4(1);
I1 = imtransform(I1, maketform('affine', [1 0 0; sx1 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I2 = imtransform(I2, maketform('affine', [1 0 0; sx2 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I3 = imtransform(I3, maketform('affine', [1 0 0; sx3 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I4 = imtransform(I4, maketform('affine', [1 0 0; sx4 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
% Y-shear归一化
m1 = moment(I1, 1, 1);
m2 = moment(I2, 1, 1);
m3 = moment(I3, 1, 1);
m4 = moment(I4, 1, 1);
sy1 = m1(3)/m1(1);
sy2 = m2(3)/m2(1);
sy3 = m3(3)/m3(1);
sy4 = m4(3)/m4(1);
I1 = imtransform(I1, maketform('affine', [1 sy1 0; 0 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I2 = imtransform(I2, maketform('affine', [1 sy2 0; 0 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I3 = imtransform(I3, maketform('affine', [1 sy3 0; 0 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
I4 = imtransform(I4, maketform('affine', [1 sy4 0; 0 1 0; 0 0 1]), 'XData', [-256 256], 'YData', [-256 256]);
% 缩放归一化
m1 = moment(I1, 1, 1);
m2 = moment(I2, 1, 1);
m3 = moment(I3, 1, 1);
m4 = moment(I4, 1, 1);
s1 = sqrt(m1(2)^2 + m1(3)^2)/m1(1);
s2 = sqrt(m2(2)^2 + m2(3)^2)/m2(1);
s3 = sqrt(m3(2)^2 + m3(3)^2)/m3(1);
s4 = sqrt(m4(2)^2 + m4(3)^2)/m4(1);
I1 = imresize(I1, [256 256]*s1/max(s1, max(s2, max(s3, s4))));
I2 = imresize(I2, [256 256]*s2/max(s1, max(s2, max(s3, s4))));
I3 = imresize(I3, [256 256]*s3/max(s1, max(s2, max(s3, s4))));
I4 = imresize(I4, [256 256]*s4/max(s1, max(s2, max(s3, s4))));
% 显示归一化后的图像
figure;
subplot(2, 2, 1); imshow(I1); title('I1');
subplot(2, 2, 2); imshow(I2); title('I2');
subplot(2, 2, 3); imshow(I3); title('I3');
subplot(2, 2, 4); imshow(I4); title('I4');
```
注:上述代码中用到了moment函数,该函数用于计算图像的矩。