展开全部
1=round(i*cos(a) - j*sin(a)+ n * sin(a))+1;
j1=round(i*sin(a) + j*cos(a));
这两个时会32313133353236313431303231363533e58685e5aeb931333264626634出现零值,那么,在MATLAB中索引F矩阵就是错误的了,你可以设置断点,然后单步运行一下看看在哪一步出现的零值,你根据旋转矩阵的计算应该是没有问题的,关键是灰度映射时可能出现零位置,最好在其中加入判断的语句,j1计算会出现0值。
你这样写,是沿坐标轴原点旋转,你说的我原来写的那个是沿固定点旋转,实现都是使用旋转矩阵,沿固定点只是先平移到原点,然后再平移回去,你可以看看,具体的我已经记不太清楚了,呵呵,已经不做图像了。
我写的那个的程序:
function im_final = imrotate_my(im_path,theta,options)
% IM_ROTATE 两维图像旋转以及双线性灰度插值算法的实现
% im_path 图像存储路径
% theta 旋转角度,正数表示顺时针旋转
% options 可以为circular(超出范围部分,按照周期形式扩展)
% crop(超出部分置零,即全黑)
% Ref. 章毓晋. 图像工程(上册)——图像处理. 清华大学出版社
% Author: lskyp Date: 2009.08.12
% Version: V1.2 Original Version: V1.0 im_bilinear.m;im_rotate.m
% with the parameter options added
error(nargchk(2,3,nargin,'string'))
if nargin == 2
options = 'circular';
else
if ~ (strcmp(options,'circular') || strcmp(options,'crop'))
error('错误的输出方法')
end
end
im_init = imread(im_path);
im_init = double(im_ini