(写这篇文章只是出于互相帮助,讨论的目的,有错误欢迎指出,排版不好,有望见谅)
前言
在开始内容之前,我想说的是本人并没有将一些经验或个人感觉发布到网上的习惯,出于在做图像处理matlab实验时网上很少能找到一些资料,所以出于对特斯拉的崇拜,决定将自己所做的相关实验结果发布,希望有所帮助,如有雷同,我只能说,好巧哦b( ̄▽ ̄)d 。
移动和旋转函数
文件内容
(以下是老师发的函数文件,按照老师的要求,是要我们做出一些有趣的东西,在这里我只用到了两个,没办法,懒。)
rotation.m
function [B] = rotation(A,theta)
[h,w] = size(A);
h0 = h/2; w0 = w/2;
B = uint8(zeros(h,w));
theta = pi/180*theta;
for k = 1 : h
for l = 1 :w
x_kl = (k-h0)*cos(theta)+(l-w0)*sin(theta)+h0;
y_kl = -(k-h0)*sin(theta)+(l-w0)*cos(theta)+w0;
if x_kl>=1 & x_kl<=h & y_kl>=1 & y_kl<=w
B(k,l) = A(round(x_kl),round(y_kl));
end
end
end
translation.m
function [B] = translation(A,dh,dw)
[h,w] = size(A);
h0 = h/2; w0 = w/2;
B = uint8(zeros(h,w));
for k = 1 : h
for l = 1 :w
x_kl = k + dh; y_kl = l+dw;
if x_kl>=1 & x_kl<=h & y_kl>=1 & y_kl<=w
B(k,l) = A(x_kl,y_kl);
end
end
end
下面是我的做法
(在老师的讲课中,我似乎听到关于rotation.m这个函数可以怎么玩的灵感,rotation[ ] 用于使图片旋转一定的角度,正角为逆时针方向,负角为顺时针方向,如果不停使图片转动一个角度,就好玩了,所以在几个小时的捣鼓后,找到了方法)
rotate_image.m
%clear all;close all;clc;
%result=imread('girl.bmp');#使用灰度图像需注销彩色图层拆分函数
result=imread('spin.bmp');
%result=imread('yinyang.bmp')
imshow(result);pause(0.05);
for i=1:48
eval(['A',num2str(i),'=',num2str(i),';']);
i=result;
%result=rotation(i,-30);%用于灰度图像
%彩色图层先分离后合并
R=i(:,:,1);
G=i(:,:,2);
B=i(:,:,3);
result(:,:,1)=rotation(R,-30);
result(:,:,2)=rotation(G,-30); %把某一、两个角度调成正的有不一样的感觉,原理你懂的
result(:,:,3)=rotation(B,-30);
imshow(result);pause(0.05);
end
(上面是我写的用到rotation.m的结果函数。我先网上找到可以不断改变变量名的方法