MATLAB图像平移、旋转、缩放、裁剪

您所在的位置:网站首页 缩放图片app MATLAB图像平移、旋转、缩放、裁剪

MATLAB图像平移、旋转、缩放、裁剪

2023-08-18 13:14| 来源: 网络整理| 查看: 265

版本: MATLAB R2019a

目录 (一)图像平移(二)图像旋转1、图像尺寸不变2、图像信息不丢失 (三)图像缩放(四)图像裁剪

(一)图像平移

使用MATLAB自带函数 translate(SE, [y x]) 功能: 在结构元素SE上进行y和x方向的位移 正数对应右移和下移

%图像平移 A=imread('1.jpg'); se=translate(strel(1),[50 50]); %向右向下平移50,50像素坐标 B=imdilate(A,se);%形态学膨胀 figure; subplot(1,2,1),subimage(A); title('原图像') subplot(1,2,2),subimage(B); title('图像平移')

仿真结果: 在这里插入图片描述

(二)图像旋转 1、图像尺寸不变

使用MATLAB自带函数 imrotate(img,30); 功能: 将图像img逆时针旋转30°

注:为什么需要插值? 答:MATLAB在进行图像操作时,是将其存放在数组中,而数组坐标必须为整数,若对图像进行旋转、缩放等操作,计算得到的坐标不一定为整数,这时候就需要进行插值。MATLAB常用插值方法有三种: (1)最近邻插值 ‘nearest’ (2)双线性插值 ‘bilinear’ (3)三次卷积插值 ‘bicubic’

A=imread('1.jpg'); B=imrotate(A,30); %旋转30° C=imrotate(A,30,'crop'); %旋转30°,并剪切图像,使得到的图像和原图像大小一致 %若不说明插值方法,默认为最近邻插值 D=imrotate(A,30,'bilinear','crop'); %双线性插值法旋转30°,并剪切图像,使得到的图像和原图像大小一致 figure; subplot(2,2,1),imshow(A); title('原图像') subplot(2,2,2),imshow(B); title('图像旋转(保留全部图像信息)') subplot(2,2,3),imshow(C); title('图像旋转(大小不变)') subplot(2,2,4),imshow(D); title('图像旋转(双线性插值)')

仿真结果: 在这里插入图片描述

2、图像信息不丢失

在进行图像旋转时,不对图像进行缩放,但仍想保留全部图像信息。需要在旋转之后,计算所需要的背景尺寸,具体程序如下:

% 读入图片 A = imread('1.jpg'); % 求出旋转矩阵 theta = 30 / 180 * pi; R = [cos(theta), -sin(theta); sin(theta), cos(theta)]'; %欧拉角旋转矩阵公式 %利用size函数读取原始图像A尺寸 sizeA = size(A); length = sizeA(1); width = sizeA(2); h = sizeA(3); c1 = [length; width] / 2; % 计算所需背景尺寸 length2 = floor(width*sin(a)+length*cos(a))+1; %floor 向上取整函数,保证图像信息完整 width2 = floor(width*cos(a)+length*sin(a))+1; c2 = [length2; width2] / 2; % 初始化背景,将旋转后的图像坐标赋给该背景 B = uint8(ones(length2, width2, 3)*128); for k = 1:h for i = 1:length2 for j = 1:width2 p = [i; j]; pp = (R*(p-c2)+c1); mn = floor(pp); ab = pp - mn; a = ab(1); b = ab(2); m = mn(1); n = mn(2); % 线性插值方法 if (pp(1) >= 2 && pp(1) = 2 && pp(2)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3