DAY13 Matlab直角坐标系实现图像旋转

% 直角坐标系实现图像旋转
im=rgb2gray(imread(‘robot.jpg‘));
figure,imshow(im);
[row,col]=size(im);
a=pi/6; % 逆时针旋转30度

%得到行的初始矩阵
r1=repmat(1:row,row,1);
i=r1‘;

%得到列的初始矩阵
j=repmat(1:col,col,1);

i1=zeros(row,col);
for m=1:row
for n=1:col
i1(m,n)=round(m*cos(a)-n*sin(a)); %获得旋转后的i像素值 并且取整
end
end

j1=zeros(row,col);
for m=1:row
for n=1:col
j1(m,n)=round(m*sin(a)+n*cos(a)); %获得旋转后的j像素值 并且取整
end
end

%判断旋转后的i,j是否小于0 坐标调整
if min(min(i1))<min(min(j1))
if min(min(i1))<0
k=abs(min(min(i1)));
new_min=min(min(i1))+(k+1);
A=i1+ones(row,col)*(k+1);
end
elseif min(min(j1))<0
k=abs(min(min(j1)));
new_min=min(min(j1))+(k+1);
A=j1+ones(row,col)*(k+1);
end

new_max_i=max(max(A)); %最大行
new_max_j=max(max(j1)); %最大列
G=zeros(new_max_i,new_max_j); %构造空白的新画布

%接下来 进项数据填充

for m=1:row
for n=1:col
G(A(m,n),j1(m,n))=im(m,n);
end
end

figure,imshow(uint8(G));

时间: 2024-10-23 03:20:49

DAY13 Matlab直角坐标系实现图像旋转的相关文章

matlab练习程序(旋转、径向模糊)

还记得过去写过径向模糊,不过当时效果似乎不好. 这次效果还可以,程序中用的算法是: 1.求当前处理点和图像中心点之间的距离r与角度ang; 2.通过对r的修改得到径向模糊. 3.通过对ang的修改得到旋转模糊. 一看代码就能全部明白,不仔细解释了. 原图如下: 处理后效果: matlab代码如下: clear all;close all;clc img=imread('lena.jpg'); [h w]=size(img); imshow(img) imgn=zeros(h,w); for y=

C/C++ BMP(24位真彩色)图像处理(4)------图像の旋转

历经一个多月,CSDN貌似终于好像把文章列表阅读量信息归零BUG给修好了,于是乎放篇做期末大作业时写的文章上来测测效果,可别又像上次一样一发文章就又坑爹了啊! 本篇谈的是图像的旋转,不算是什么新鲜的题目了.但是现在由于很多工具如MATLAB.OPENCV等都把算法写好给用户调用,导致大多用户只知其然不知其所以然,所以回顾一下也是好的. 图像的旋转,说到底就是每个像素点绕着某个圆心旋转一定角度.如果是写代码的话,旋转的角度和圆心应该是已知的条件,我们第一个思路是根据已知条件求取出图像经过旋转后的新

关于图像旋转以及旋转后对应像素的位置

参考链接:http://www.echojb.com/image/2016/11/14/258268.html 一.首先来说一下关于像素旋转一定角度后的对应位置: (1)旋转中心为左上角原点: 旋转有一个绕什么转的问题.我们先来看最简单的,绕第一个像素转,则旋转的情况会像这样: 令旋转前有 旋转a角度后有 以矩阵形式表示为 (2)旋转中心为图像中心: 当图片较大时,计算会很慢.主要是判断和计算太多了这里只讨论图像处理,程序的优化暂时放一边运行结果如下: 我们能看到,旋转后的图像有很多“蜂窝煤”.

每日算法之三十七:Rotate Image (图像旋转)

You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). Follow up: Could you do this in-place? 原地图像顺时针旋转90度.因为要求空间复杂度是常数,因此应该迭代旋转操作. class Solution { public: void rotate(vector<vector<int> > &mat

opencv-从图像旋转学习Mat数据访问

先看一个简单的例子 代码: // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<opencv2/opencv.hpp> #include<iostream> #include<vector> using namespace std; using namespace c

Matlab在读取图像时怎么实现手动选择图像

平时看的一些关于图像处理的文献通常要在matlab里面写一下,以便加深对这个算法的理解,当然写好以后需要图像来测试,以前我常常在 path='图像所在的路径'; img=imread(path+图像的名字); 在imread函数中进行不断修改图像的名字,以便测试不同的图像对于该算法的效果如何. 想必大家也是常常这样做实验吧,今天突然想,这样一直改名字多麻烦多浪费时间,我觉得像Matlab这么强大的软件肯定提供这样的函数给用户,因为每个软件都要考虑用户体验的哈! 在网上搜了很久没找到非常好的答案,

使用OpenCL+OpenCV实现图像旋转(一)

[题外话]近期申请了一个微信公众号:平凡程式人生.有兴趣的朋友可以关注,那里将会涉及更多更新OpenCL+OpenCV以及图像处理方面的文章. 最近在学习<OPENCL异构计算>,其中有一个实例是使用OpenCL实现图像旋转.这个实例中并没有涉及读取.保存.显示图像等操作,其中也存在一些小bug.在学习OpenCL之初,完整地实现这个实例还是很有意义的事情. 1.图像旋转原理 所谓图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程.这个点通常就是图像的中心. 由于是按照中心旋

图像旋转的原理

图像旋转是指图像以某一点为中心旋转一定的角度,形成一幅新的图像的过程.当然这个点通常就是图像的中心.既然是按照中心旋转,自然会有这样一个属性:旋转前和旋转后的点离中心的位置不变. 根据这个属性,我们可以得到旋转后的点的坐标与原坐标的对应关系.由于原图像的坐标是以左上角为原点的,所以我们先把坐标转换为以图像中心为原点.假设原图像的宽为w,高为h,(x0,y0)为原坐标内的一点,转换坐标后的点为(x1,y1).那么不难得到: x1 = x0 - w/2; y1 = -y0 + h/2; 在新的坐标系

【OpenCV】图像旋转详解,边缘用黑色填充

项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了.根据<learnning OpenCV>发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了. 例子如下: int main( int argc, char** argv ) { IplImage* src=cvLoadImage("C:\\Users\\Liu\\Desktop\\bridge.bmp",1); IplImage* dst = cvCloneImage( src ); int