空域指像素位置所在的空间,一般看作图像的原始空间。空域图像增强指直接作用于像素,在图像空间的增强。在空域增强中分为点操作和模板操作。点操作还可以分为几何点操作和灰度点操作。
几何点操作主要借助像素的坐标变换来改变像素位置,以此来改变图像获得增强效果。
图像坐标变换
图像坐标变换是一种位置映射操作,常见的图像坐标变换有:
(一个像素点的坐标可记为(x,y),如使用齐次坐标,则可记为(x,y,1),也可以用矢量表示记为[x,y,1])
-
平移变换
-
放缩变换
-
旋转变换
-
拉伸变换
拉伸变换是一种在一个方向上放大而在另一个方向上缩小的变换,是一种特殊的缩放变换。
-
剪切变换
剪切变换是水平坐标或垂直坐标之一发生平移变换。
-
反变换
平移、放缩、旋转变换的反向进行。 -
变换级联
多个不同变换连续进行,变换次序之间一般不可以互换。
用MATLAB实现:
%% 图像坐标变换
% 平移、放缩、旋转
clc,clear
I = imread('lenna1.jpg');
figure(1);imshow(I);title('原图像');
[M,N] = size(I);%获取原始图像大小
I = double(I);
%% 平移变换
Tx = 50;%X轴平移量
Ty = 50;%Y轴平移量
T =[1 0 Tx;0 1 Ty;0 0 1];%平移变换矩阵
I1 = zeros(M,N);%构造结果矩阵
for i = 1 : M
for j = 1 : N
temp1 = [i;j;1];
temp1 = T * temp1;
x1 = temp1(1,1);
y1 = temp1(2,1);
% 判断变换后的位置是否越界
if(x1 <= M) && (y1 <= N) && (x1 >= 1) && (y1 >= 1)
I1(i,j) = I(x1,y1);
end
end
end
figure(2);imshow(uint8(I1));title('平移后图像');
%% 放缩变换
Sx = 2;%放缩系数Sx
Sy = 2;%放缩系数Sy
S = [1/Sx 0 0;0 1/Sy 0;0 0 1];%放缩变换矩阵
I2 = zeros(M * Sx,N * Sy);%构造结果矩阵
for i = 1 : M * Sx
for j = 1 : N * Sy
temp2 = [i;j;1];
temp2 = S * temp2;
x2 = uint16(temp2(1,1));
y2 = uint16(temp2(2,1));
% 判断变换后的位置是否越界
if(x2 <= M) && (y2 <= N) && (x2 >= 1) && (y2 >= 1)
I2(i,j) = I(x2,y2);
end
end
end
figure(3);imshow(uint8(I2));title('放缩后图像');
%% 旋转变换
r = 45 * 3.1415926 / 180.0; % 旋转角度
R = [cos(r) sin(r) 0; -sin(r) cos(r) 0; 0 0 1]; % 旋转变换矩阵
I3 = zeros(M,N); % 构造结果矩阵。每个像素点默认初始化为0(黑色)
for i = 1 : M
for j = 1 : N
temp3 = [i;j;1];
temp3 = R * temp3;% 矩阵乘法
x3 = uint16(temp3(1, 1));
y3 = uint16(temp3(2, 1));
% 变换后的位置判断是否越界
if (x3 <= M) && (y3 <= N) && (x3 >= 1) && (y3 >= 1)
I3(i, j) = I(x3, y3);
end
end
end
figure(4);imshow(uint8(I3)); title('旋转后图像');