数字图像 MATLAB中图像的几何变换

       图像的几何变换包括平移、旋转、缩放、错切、镜像变换、转置等,是将一幅图像中的坐标映射到另外一幅图像中的新坐标位置,它不改变图像的像素值,只是改变像素所在的几何位置,使原始图像按照需要产生位置、形状和大小的变化。

缩放:

MATLAB中的imresize函数用于对图像进行缩放处理。该函数的调用格式如下:

B = imresize(A, m)

其中,A表示要缩放的图像,m表示缩放系数。缩放后的图像保存在B中。

imresize函数还可以接受其他可选参数,例如:

  • 'bilinear':采用双线性插值算法。
  • 'bicubic':采用双三次插值算法。
  • [numrows numcols]:指定目标图像的高度和宽度。

当使用[numrows numcols]参数时,缩放后的图像可能会发生畸变。如果希望保持源图像的长宽比例,建议使用双线性或双三次插值算法。

1.将灰度图像‘cameraman.jpg’调整大小。

(1)增大3倍;

% 读取灰度图像 'cameraman.jpg'  
img = imread('cameraman.jpg');  
  
% 最近邻插补
img_resized1 = imresize(img, 3, 'nearest');  
imshow(img_resized1);  

% 双线性插补
img_resized2 = imresize(img, 3, 'bilinear');  
imshow(img_resized2);  

% 双三次插补  
img_resized3 = imresize(img, 3, 'bicubic');  
imshow(img_resized3);  

(2)减少1/2;

% 读取灰度图像 'cameraman.jpg'  
img = imread('cameraman.jpg');  

% 最近邻插补 
img_resized1 = imresize(img, 0.5, 'nearest');  
imshow(img_resized1);  

% 双线性插补  
img_resized2 = imresize(img, 0.5, 'bilinear');  
imshow(img_resized2);  

% 双三次插补  
img_resized3 = imresize(img, 0.5, 'bicubic');  
imshow(img_resized3);  

(3) 调整大小为〔20 80〕。

% 读取灰度图像 'cameraman.jpg'  
img = imread('cameraman.jpg');  

% 最近邻插补
img_resized1 = imresize(img, [20 80], 'nearest');  
imshow(img_resized1);

% 双线性插补 
img_resized2 = imresize(img, [20 80], 'bilinear');  
imshow(img_resized2);

% 双三次插补 
img_resized3 = imresize(img, [20 80], 'bicubic');  
imshow(img_resized3);

旋转:

MATLAB中的imrotate函数用于对图像进行旋转操作。该函数的调用格式如下:

B = imrotate(A, angle)

其中,A表示要旋转的图像,angle表示旋转的角度。旋转后的图像保存在B中。

imrotate函数还可以接受其他可选参数,例如:

  • 'method'参数用于指定插补方法,可选值包括'nearest'(最近邻插补)、'bilinear'(双线性插补)和'bicubic'(双三次插补)。
  • 'bbox'参数用于指定旋转后的图像边界框,格式为[xmin ymin width height],其中(xmin, ymin)为图像左上角的坐标,widthheight分别为旋转后图像的宽度和高度。

2. 将灰度图像‘cameraman.jpg’进行旋转。

(1)顺时针旋转30°;

(2)逆时针旋转60°;

(3)逆时针旋转90°;

(4)用参数‘crop’逆时针旋转60°。

完整代码:

A = imread('cameraman.jpg');     % 读取灰度图像 'cameraman.jpg'  
B11 = imrotate(A,-30,'bicubic');   % 顺时针旋转30度(双三次插补)    
B12 = imrotate(A,-30,'bilinear');   % 顺时针旋转30度(双线性插补)  
B13 = imrotate(A,-30,'nearest');   % 顺时针旋转30度(最近邻插补)  
B21 = imrotate(A,60,'bicubic','crop');     % 用参数'crop'逆时针旋转60度(双三次插补)  
B22 = imrotate(A,60,'bilinear','crop');   % 用参数'crop'逆时针旋转60度(双线性插补) 
B23 = imrotate(A,60,'nearest','crop');    % 用参数'crop'逆时针旋转60度(最近邻插补)  
B31 = imrotate(A,90,'bicubic');      % 逆时针旋转90度(双三次插补)  
B32 = imrotate(A,90,'bilinear');     % 逆时针旋转90度(双线性插补)
B33 = imrotate(A,90,'nearest');      % 逆时针旋转90度(最近邻插补)  

subplot(3,3,1);imshow(B11);
subplot(3,3,2);imshow(B12);
subplot(3,3,3);imshow(B13);
subplot(3,3,4);imshow(B21);
subplot(3,3,5);imshow(B22);
subplot(3,3,6);imshow(B23);
subplot(3,3,7);imshow(B31);
subplot(3,3,8);imshow(B32);
subplot(3,3,9);imshow(B33);

剪切:

MATLAB中的imcrop函数用于对图像进行裁剪操作。该函数的调用格式如下:

I2 = imcrop(I,rect)  
X2 = imcrop(X,map,rect)  
RGB2 = imcrop(RGB,rect)

在这些调用格式中,rect表示要裁剪的矩形区域,可以是一个包含四个元素的向量,例如[xmin ymin width height],也可以是一个坐标点对,例如[xmin ymin]。通过指定矩形区域,可以进一步控制裁剪的位置和大小。

3.将索引图像chess.mat进行剪切 ,非交互式剪切,剪切范围为[30 60 40 100]。

MATLAB中的subimage函数用于在图形窗口中显示图像,并可以设置横轴和纵轴的坐标值范围。它必须与subplot函数一起使用,后者用于指定下一个要显示的图像在整个图像显示窗口中的分块。

subimage函数的调用格式如下:

H = subimage(x, y, ...)

其中,xy表示图像在图形窗口中的坐标位置,其他参数可选,用于指定要显示的图像。返回的H是图像句柄,可以用于后续操作。

需要注意的是,subimage函数显示的图像可以是logical、uint8、uint16或double类型。

完整代码:

load chess.mat;
subplot(1,2,1);
subimage(X,map);
title('原图像')
X1=imcrop(X,map,[30 60 40 100]);
subplot(1,2,2);
subimage(X1,map);
title('原图剪切块[30 60 40 100]')

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值