图像旋转(matlab)

来源:互联网 发布:织梦门户网站模板源码 编辑:程序博客网 时间:2024/06/06 01:27

原理

 就一个矩阵乘法

A = [cos(alpha) sin(alpha) 0;    -sin(aplha) cos(alpha) 0;    0           0          1];newij = A*[i;j;1];

 坐标转化公式 newij 为新坐标,i,j 为旧坐标

 注意要使用uint8强制转换才能imshow掉

 这样计算完会有的新坐标覆盖不到,也就是0,这个时候要用插值,我懒得插,所以就用的maxpooling

pooling = uint8(zeros(m,n,c));pooling(1:m-1,1:n-1,:) =nimg(2:m,2:n,:);nimg = max(pooling,nimg);

所以真的啊,translation在matlab里真的只要一行没必要矩阵乘法

源代码

function [nimg] = irotate(path,ang)img = imread(path);[m,n,c] = size(img);A = [cos(ang),sin(ang),0;-sin(ang),cos(ang),0;0,0,1];nimg = uint8(zeros(m,n,c));for i = 1:m    for j = 1:n        newij = A*[i;j;1];        if(newij(1)>0 && newij(2)>0 && newij(1)<m && newij(2)<n)            nimg(ceil(newij(1)),ceil(newij(2)),:) = img(i,j,:);        end    endendpooling = uint8(zeros(m,n,c));pooling(1:m-1,1:n-1,:) =nimg(2:m,2:n,:);nimg = max(pooling,nimg);imshow(nimg)
0 0
原创粉丝点击