MATLAB图像处理之几何变换——平移与旋转

这篇具有很好参考价值的文章主要介绍了MATLAB图像处理之几何变换——平移与旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、图像平移——imtranslate函数

A = imread('cameraman.tif');
V = [50 100];
I = imtranslate(A,V);
figure;
subplot(1,2,1) %创建一个12列的坐标区,并在1号位置显示。
imshow(A);
title('原图像')
subplot(1,2,2) %创建一个12列的坐标区,并在2号位置显示。
imshow(I);
title("X平移" +V(1)+ ";  Y平移" +V(2)+ "后图像")

可以发现,原图在原坐标基础上向X、Y方向分别平移了50和100个单位。但相应平移的部分也被遮挡了,显然这不符合一些场景的应用需求。
matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉

为此,MATLAB还提供了参数设置。在imtranslate函数中设置’OutputView’参数为’full’,即可防止遮挡平移的图像,如下图所示。

A = imread('cameraman.tif');
V = [50 100];
I1 = imtranslate(A,V);
I2 = imtranslate(A,V,'OutputView','full'); %设置参数
figure;
subplot(1,3,1)
imshow(A);
title('原图像')
subplot(1,3,2)
imshow(I1);
title("X平移" +V(1)+ ";  Y平移" +V(2)+ "后遮挡图像")
subplot(1,3,3)
imshow(I2);
title("X平移" +V(1)+ ";  Y平移" +V(2)+ "后图像")

matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉

二、图像旋转——imrotate函数

matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉

MATLAB在进行图像操作时,是将数据存放在数组中,而数组坐标必须为整数,若对图像进行旋转、缩放等操作,计算得到的坐标则不一定为整数,这时候就需要进行插值。通常直接使用 imrotate(I,angle) 就可以了,其默认使用最近邻点插值‘nearest’。也可以使用 imrotate(I,angle,method),其中method还包括双线性插值 ‘bilinear’和三次卷积插值 ‘bicubic’。

A = imread('cameraman.tif');
B = imrotate(A,30);  % 默认使用最近邻点插值‘nearest’              
C = imrotate(A,30,'bilinear'); % 双线性插值
D = imrotate(A,30,'bicubic'); % 三次卷积插值
figure;
subplot(1,4,1),imshow(A);
title('原图像')
subplot(1,4,2),imshow(B);
title('默认插值')
subplot(1,4,3),imshow(C);
title('双线性插值')
subplot(1,4,4),imshow(D);
title('三次卷积插值')

matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉

由上图可以发现,经不同插值法旋转后得到的图像肉眼难以看出差别,但对应的数值确有差异,具体选择则需根据实际情况而定。
使用 imrotate(I,angle,method,bbox) 则可以原大小显示。其中bbox — 定义输出图像大小的边界框,包括’loose’ (默认)和 'crop’两参数,'crop’表示使输出图像与输入图像大小相同,裁剪旋转后的图像以适应边界框。

A = imread('cameraman.tif');
B = imrotate(A,30,'crop');                
C = imrotate(A,30,'bilinear','crop');
D = imrotate(A,30,'bicubic','crop');

效果如下,
matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉
与平移一样,经旋转后的图像虽保留原尺寸大小,但部分被遮掩了,想要原尺寸全图显示则需要自定义函数进行图像计算。

A = imread('cameraman.tif');
% 求出旋转矩阵
rotate = 30;% 旋转角度
theta = rotate / 180 * pi;
R = [cos(theta), -sin(theta); sin(theta), cos(theta)]';
%欧拉角旋转矩阵公式
%利用size函数读取原始图像A尺寸
[m,n,z] = size(A);
length = m;
width = n;
c1 = [length; width] / 2;

% 计算所需背景尺寸
length2 = floor(width*sin(theta)+length*cos(theta))+1;
%floor 向上取整函数,保证图像信息完整
width2 = floor(width*cos(theta)+length*sin(theta))+1;
c2 = [length2; width2] / 2;
% 初始化背景,将旋转后的图像坐标赋给该背景
I = uint8(ones(length2, width2,z));
for k = 1:z
    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) <= length-1 && pp(2) >= 2 && pp(2) <= width-1)
                I(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);
            end
        end
    end
end


figure;
subplot(1,2,1),imshow(A);
title('原图像')
subplot(1,2,2)
imshow(I);
title("旋转" +rotate+"°后图像")

以下即为三种旋转方式效果:
matlab平移图像代码,MATLAB,matlab,图像处理,计算机视觉文章来源地址https://www.toymoban.com/news/detail-568923.html

到了这里,关于MATLAB图像处理之几何变换——平移与旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Opencv-C++笔记 (16) : 几何变换 (图像的翻转(镜像),平移,旋转,仿射,透视变换)

    图像旋转是指图像按照某个位置转动一定的角度的过程,旋转中图像仍保持着原始尺寸。图像旋转后图像水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。 假设有一个点:P(x,y),它在绕原点 O(0,0) 旋转 β 后,被转换成

    2024年02月14日
    浏览(64)
  • Python图像处理丨图像缩放、旋转、翻转与图像平移

    摘要: 本篇文章主要讲解Python调用OpenCV实现图像位移操作、旋转和翻转效果,包括四部分知识:图像缩放、图像旋转、图像翻转、图像平移。 本文分享自华为云社区《[Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移》,作者:eastmount 。 本篇文章主要讲解Pyth

    2024年02月06日
    浏览(53)
  • OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

    为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。 图像缩放函数,用于把图像按指定的尺寸放大或缩小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的图像 src:需要变换的原图像 disize:(x, y)需要

    2024年02月08日
    浏览(63)
  • python图像处理实战(二)—图像几何变换

    🚀写在前面🚀 🖊个人主页:https://blog.csdn.net/m0_52051577?type=blog  🎁欢迎各位大佬支持点赞收藏,三连必回!! 🔈本人新开系列专栏—python图像处理 ❀愿每一个骤雨初晴之时,所有的蜻蜓振翅和雨后惊雷,都归你。 前言       图像几何变换就是在不改变图像像素值的前提

    2024年02月09日
    浏览(60)
  • python图像处理实战(三)—图像几何变换

    🚀写在前面🚀 🖊个人主页:https://blog.csdn.net/m0_52051577?type=blog  🎁欢迎各位大佬支持点赞收藏,三连必回!! 🔈本人新开系列专栏—python图像处理 ❀愿每一个骤雨初晴之时,所有的蜻蜓振翅和雨后惊雷,都归你。 前言       图像几何变换就是在不改变图像像素值的前提

    2024年02月11日
    浏览(57)
  • Python用来处理图像几何变换

    Python用来处理图像几何变换的方法供大家学习和参考。

    2024年02月15日
    浏览(41)
  • 数字图像处理:亮度对比度-几何变换-噪声处理

    亮度与对比度转换 图像变换可分为以下两种: 点算子:基于像素变换,在这一类图像变换中,仅仅根据输入像素值计算相应的输出像素值 邻域算子:基于图像区域进行变换 两种常用的点算子是用常数对点的像素值进行乘法或加法运算,可以表示为: g ( i , j ) = α ∗ f ( i ,

    2024年02月10日
    浏览(55)
  • 九.图像处理与光学之图像几何变换算法(双线性插值)

    ​ 图像几何变换是图像处理中非常基础实用的技能,主要包括图片位移、缩放、镜像、剪切、放射变换等,在对图像进行空间变换的过程中,典型的情况是在对图像进行放大,旋转处理的时候,图像会出现失真的现象。这是由于在变换之后的图像中,存在着一些变换之前的图

    2024年02月13日
    浏览(46)
  • Python-OpenCV中的图像处理-几何变换

    对图像进行各种几个变换,例如移动,旋转,仿射变换等。 cv2.resize() cv2.INTER_AREA v2.INTER_CUBIC v2.INTER_LINEAR res = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) 或 height, width = img.shape[:2] res = cv2.resize(img, (2 width, 2 height), interpolation=cv2.INTER_CUBIC) OpenCV提供了使用函数cv2.warpAffine()实

    2024年02月13日
    浏览(87)
  • 数字图像处理实验(二)|图像变换{离散傅里叶变换fft2,离散余弦变换dct2、频谱平移fftshift}(附实验代码和截图)

    1了解图像变换的原理; 2理解图像变换系数的特点; 3掌握图像变换的方法及应用; 4掌握图像的频谱分析方法; 5了解图像变换在图像数据压缩、图像滤波等方面的应用。 安装了MATLAB软件的台式或笔记本电脑 1.离散傅里叶变换 对于二维离散信号,Fourier正变换定义为: 二维离

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包