【数字图像处理】MATLAB实现图像旋转 您所在的位置:网站首页 matlab向量旋转 【数字图像处理】MATLAB实现图像旋转

【数字图像处理】MATLAB实现图像旋转

2023-12-11 03:19| 来源: 网络整理| 查看: 265

前言

上节课学习了实现图像旋转的原理,下课后用matlab实现了一下图像旋转的功能,这里做个记录。

图像旋转原理

图像旋转的本质利用的是向量的旋转。

矩阵乘法的实质是进行线性变换,因此对一个向量进行旋转操作也可以通过矩阵和向量相乘的方式进行。

【ps:线性代数的本质这个视频很直观地解释了各种线性代数运算的实质,链接:https://www.bilibili.com/video/av6731067】

因为图像都是通过二维矩阵存放的(单通道),所以对图像进行旋转时要先设定一个像素作为旋转轴,然后其他的像素位置可以看作从旋转轴出发的向量。

如图中间的红点为旋转轴,则旋转的实质就是将图中的各个向量进行旋转,然后将旋转前的位置的像素值赋值给旋转后的位置的像素值。

假设有二维向量v = [x ; y],若要进行逆时针旋转角度a。则旋转矩阵R为

旋转后的向量v2 = R * v。

在正式处理过程中可以这么表示,原像素位置记为p,中心点记为c,旋转后像素位置记为pp

则有(pp - c) = R*(p - c)

pp = R*(p-c) + c

代码实现过程

一共写了三份代码,依次改进了旋转图像的效果。

第一次实现代码

第一次实现代码的思路是正向的思路,也就是把原图进行向量的旋转,找到旋转后的向量的位置,然后将原图的像素值赋值过去即可。

代码实现

% 读入图片 im = imread('1.jpg'); % 求出旋转矩阵 a = 30 / 180 * pi; R = [cos(a), -sin(a); sin(a), cos(a)]; % 求出图片大小 ch为通道数 h为高度 w为宽度 sz = size(im); h = sz(1); w = sz(2); ch = sz(3); c = [h; w] / 2; % 初始化结果图像 im2 = uint8(zeros(h, w, 3)); for k = 1:ch for i = 1:h for j = 1:w p = [i; j]; % round为四舍五入 pp = round(R*(p-c)+c); if (pp(1) >= 1 && pp(1) = 1 && pp(2) = 2 && pp(1) = 2 && pp(2)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有