用2023a版matlab写一段将四副256*256的灰度图像I1、I2、I3、I4进行图像归一化处理,图像归一化的原理是:首先计算并确定原始图像对各种仿射变换具有较强不变性的图像矩,然后根据得到的图像矩确定变换函数的具体参数,最后利用变换函数将原始图像转换为具有标准形式的图像,其归一化过程主要包括4个步骤:平移归一化、X-shear归一化、Y-shear归一化和缩放归一化,原始图像在经过以上四个步骤后,便能够转化为标准图像,从而能够降低仿射变换对图像的影响
时间: 2023-11-04 17:14:42 浏览: 56
以下是用2023a版matlab实现将四副256*256的灰度图像I1、I2、I3、I4进行图像归一化处理的代码:
```matlab
% 读取四幅灰度图像并保存到一个cell数组中
I{1} = imread('I1.jpg');
I{2} = imread('I2.jpg');
I{3} = imread('I3.jpg');
I{4} = imread('I4.jpg');
% 定义仿射变换中的矩阵A和向量t
A = eye(2);
t = [0; 0];
% 平移归一化
for i = 1:4
% 计算图像中心
[m, n] = size(I{i});
center = [n/2; m/2];
% 计算平移距离
delta = ceil(center) - center;
% 更新仿射变换矩阵
t = t - A*delta;
end
% X-shear归一化
for i = 1:4
% 计算图像中心
[m, n] = size(I{i});
center = [n/2; m/2];
% 计算X-shear参数
sx = -sum(sum(I{i}.*(1:n)'*ones(1,m))) / sum(sum(I{i}.*ones(n,m)));
% 更新仿射变换矩阵
A(1,2) = sx;
t = t - A*center;
end
% Y-shear归一化
for i = 1:4
% 计算图像中心
[m, n] = size(I{i});
center = [n/2; m/2];
% 计算Y-shear参数
sy = -sum(sum(I{i}.*ones(n,1)*(1:m))) / sum(sum(I{i}.*ones(n,m)));
% 更新仿射变换矩阵
A(2,1) = sy;
t = t - A*center;
end
% 缩放归一化
for i = 1:4
% 计算图像中心
[m, n] = size(I{i});
center = [n/2; m/2];
% 计算缩放比例
s = sqrt(sum(sum(I{i}.*((1:n)'*ones(1,m)-center(:,1)*ones(n,m)).^2 + ...
(I{i}.*(ones(n,1)*(1:m)-center(:,2)*ones(n,m))).^2)) / sum(sum(I{i})));
% 更新仿射变换矩阵
A = s*A;
t = t - A*center;
% 对图像进行仿射变换
I{i} = imtransform(I{i}, maketform('affine', [A'; t']), 'XData', [1,n], 'YData', [1,m]);
end
% 显示归一化后的图像
figure;
subplot(2,2,1);
imshow(I{1});
title('Normalized I1');
subplot(2,2,2);
imshow(I{2});
title('Normalized I2');
subplot(2,2,3);
imshow(I{3});
title('Normalized I3');
subplot(2,2,4);
imshow(I{4});
title('Normalized I4');
```
以上代码实现了平移归一化、X-shear归一化、Y-shear归一化和缩放归一化四个步骤,最后将归一化后的图像显示出来。