用普通坐标变换的方法进行旋转图像时,由于取整后的坐标不能与原来一一对应,会出现空像素即黑点,例如
I=imread('cameraman.tif');
x=pi/4;
[m,n]=size(I);
J=zeros(m,n);
for n1=1:m
for n2=1:n
u=floor(n1*cos(x)-n2*sin(x))+m;
v=floor(n1*sin(x)+n2*cos(x))+n;
J(u,v)=I(n1,n2);
end
end
J=uint8(J);
imshow(J);
旋转效果如下图
可以看到图片上明显的黑点。
为了解决这种问题,可以采取插值法将空像素点补全,常用插值法包括最邻近插值法,双线性插值法,三次内插值法。
双线性插值法实现如下:
img=imread('cameraman.tif');
[h,w]=size(img);
img2=imrotate(img,45,'bilinear');
th