图像的几何变换(matlab)

1.引言:

图像的几何变换是将一幅图像中的坐标映射到另一幅图片中的新坐标位置,它不改变图像的像素值,只改变像素所在的几何位置,使原图像按照需要产生位置、形状和大小的变换。

2.图像的平移:

将一幅图片上的所有点都按照给定的偏移量在水平方向沿着X轴,在垂直方向沿着Y轴移动,平移后的大小相同。

imtranslate函数平移图像

>> I = imread('E:\persional\matlab\images\Fig0809(a).bmp');
se = imtranslate(I, [50 140]);%将一个平面结构化元素分别向下和向右移动
subplot(121);imshow(I), title('原图')
subplot(122), imshow(se), title('移动后的图像');

imdilate膨胀函数平移图像

I = imread('E:\persional\matlab\images\Fig0809(a).bmp');
se = translate(strel(1), [50 140]);%将一个平面结构化元素分别向下和向右移动
J = imdilate(I,se);%利用膨胀函数平移图像
subplot(121);imshow(I), title('原图')
subplot(122), imshow(J), title('移动后的图像');

在这里插入图片描述

图像的滤镜:

图像的镜像分为两种垂直镜像和水平镜像
水平镜像:(x0,y0) ------ x1 = M - x0 y1 = y0;
垂直水平:(x0,y0) ------ x1 = x0 y1 = M - y0;

Z = flipdim():

close all;clear all;clc; 
I=imread('E:\persional\matlab\images\Fig0809(a).bmp'); 
J1=flipdim(I,1);
J2=flipdim(I,2);
J3=flipdim(I,3);
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
//set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure,
subplot(1,2,1),imshow(I) ;
subplot(1,2,2),imshow(J1);
figure,
subplot(1,2,1),imshow(J2);
subplot(1,2,2),imshow(J3);

在这里插入图片描述
在这里插入图片描述

图像的放缩

图像放缩是指给定的图像在X轴方向按比例缩放fx,在Y轴方向按比例缩放fy,图像比例缩放会改变原始图像像素间的相对位置,产生几何畸变。
1.B = imresize(A,m): m>1,放大;0<m<1,缩小;
2.B = imresize(A,[mrows,ncols]): [mrows,ncols]说明缩放后的行和列,如果位NaN,函数会按照输入图像A丛横比生成ncols或mrows的数;
3.[B,newmap] = (A,map,m): m按比例缩放;也可以是 [mrows,ncols];
4.[…] = imresize(…,method): method可选:
插值方法的类型:'nearest’最近邻插值;'bilinear’双线性插值、'bicubic’双三次插值
插值的核函数:'box’Box 型核函数、'triangle’三角型核函数('bicubic’相同)、'Cubic’立方体核函数(‘bicubic相同’)、'lanczos2’Lanczos-2核函数和’lanczos3’Lanczos-3核函数。
5.[…] = imreadsize(…,method):通过设置paramter的值value,控制图像的缩放特性,如下图所示:
在这里插入图片描述

close all;clear all;clc;
[X,map] = imread('E:\persional\matlab\images\Fig0809(a).bmp');
J1 = imresize(X,0.25);
J2 = imresize(X,3.5);
J3 = imresize(X,[64,40]);%放缩后的图像行列比例
J4 = imresize(X,[64,NaN]);
J5 = imresize(X,1.6,'bilinear');%设置插值法
J6 = imresize(X,1.6,'triangle');
figure,
subplot(221),imshow(I);
subplot(222),imshow(J1);
subplot(223),imshow(I1)
subplot(224),imshow(J2)

在这里插入图片描述

图像的转置:

图像的转置即行列坐标互换,例如:点(x0,y0)转换后的新坐标点(x1,y1)数学表达式:x1 = x0 ; y1 = y0;进行图像转置后,大小会发生改变:

function J = transp(I)
[M,N,G] = size(I);
I = im2double(I);
J = ones(N,M,G);
for i = 1:M
    for j = 1:N
        J(j,i,:) = I(i,j,:);
    end
end
%调用函数
close all;clear all;clc;
I=imread('E:\persional\matlab\images\Fig0809(a).bmp'); 					
J1=transp(I);										
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure,
subplot(221),imshow(I);
subplot(222),imshow(J1);

在这里插入图片描述

图像的旋转:

图像的旋转变换属于图像的位置变换,通常以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。旋转后,图像的大小一般会改变。

B = imrotate(A,angle,method,bbox) — angle:角度;method:'nearest’最近邻插值;'bilinear’双线性插值、'bicubic’双三次插值;bbox:返回图像的大小(‘crop’,‘loose’)

>> I=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> J1 = imrotate(I,30);
>> J2 = imrotate(I,-30);
>> J3 = imrotate(I,30,'bicubic','crop');
>> J4 = imrotate(I,-30,'bicubic','loose');
>> figure,
>> subplot(221),imshow(J1);
>> subplot(222),imshow(J2);
>> subplot(223),imshow(J3);
>> subplot(224),imshow(J4);

在这里插入图片描述

图像的剪切:

对图像部分感兴趣的地方进行剪切;
X1 = imcrop(I,[xmin,ymin,width,height])
[X1,map] = (…)
X1 = imcrop(I,map)
[X1,Y1,[xmin,ymin,width,height]] = imcrop(…)

>>[A,map]=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> rect = [75 68 130 112];
>> X1 = imcrop(A,rect);
>> figure,
>> subplot,imshow(121),imshow(X1);

>>[A,rect] = imcrop(A);%选择性剪切
>>subplot,imshow(121),imshow(A);

在这里插入图片描述

图像的变换:

可以自定义多种类型的空间变换(平移、缩放、旋转、剪切)、投影变换。

B = imtransform(A,TFORM,INTERP)

TFORM:通过maketform()返回;
INTERP:'nearest’最近邻插值;'bilinear’双线性插值、'bicubic’双三次插值。

设原图像f(x,y)和变换后图像g(x’,y’)
(x’,y’) = T(x,y)
x’ = a0x+a1x+a2;
y’ = b0y+b1y+b2;
写成3x3矩阵进行结构体设计;

在这里插入图片描述

>> [A,map]=imread('E:\persional\matlab\images\Fig0809(a).bmp');
>> Ta = maketform('affine',[cosd(30),-sind(30),0;sind(30),cosd(30) 0;0 0 1])%旋转结构体
>> Ia = imtransform(I,Ta);
>> Tb = maketform('affine',[5 0 0;0 10.5 0;0 0 1]);%平移结构体
>> Ib = imtransform(I,Tb);
>> xform = [0.5 0 0;0 0.5 0;0 0 1];
>> Tc = maketform('affine',xform);%缩放结构体
>>> Ic = imtransform(I,Tc,'XData',[1 (size(I,2)+xform(3,1))],'YData',[1 size(I,1)+xform(3,2)],'FillValues',255);
>> Td = maketform('affine',[1 4 0;2 1 0;0 0 1]);%剪切结构体
>> Id = imtransform(I,Td,'FillValues',255);
>>> figure,
>> subplot(221),imshow(Ia),axis on;
>> subplot(222),imshow(Ib),axis on;
>> subplot(223),imshow(Ic),axis on;
>> subplot(224),imshow(Id),axis on;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_56260304/article/details/127196785