700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > MATLAB图像平移 旋转 缩放 裁剪

MATLAB图像平移 旋转 缩放 裁剪

时间:2022-07-07 13:23:47

相关推荐

MATLAB图像平移 旋转 缩放 裁剪

版本:MATLAB Ra

目录

(一)图像平移(二)图像旋转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:hfor i = 1:length2for j = 1:width2p = [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) <= length-1 && pp(2) >= 2 && pp(2) <= width-1)B(i, j, k) = (1-a)*(1-b)*A(m, n, k) + a*(1-b)*A(m+1, n, k)...+(1-a)*b*A(m, n, k)+a*b*A(m, n, k);endendendendfigure;imshow(A);title('原图像')figure;imshow(B);title('图像旋转(扩大背景)')

仿真结果:

(三)图像缩放

使用MATLAB自带函数 imresize(img,a,‘method’)

功能:

对图像img进行系数为a的缩放。

A = imread('1.jpg');a = 2; aa = 0.5;B=imresize(A,a,'nearest');C=imresize(A,aa,'nearest');figure;imshow(A);title('原图像')figure;imshow(B);title('放大2倍图像')figure;imshow(C);title('放大0.5倍图像')

仿真结果:

(四)图像裁剪

使用MATLAB自带函数 imcrop(img,[x y height length])

功能:在原始图像img 坐标位置(x,y)开始,向下向右进行裁剪

A=imread('1.jpg'); %读入图像rect = [20 20 150 150];B=imcrop(A,rect); %进行图像剪切subplot(121),imshow(A); title('原图像')rectangle('Position',rect,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域subplot(122),imshow(B); title('裁剪图像')

“每天给自己一个希望,试着不为明天而烦恼,不为昨天而叹息,只为今天更美好。”加油!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。