话说,图片旋转是这样玩的吧?
function p=HY_imrotate(img,angle)
angle=angle/180*pi;
[h,w]=size(img);
% 计算新的图像大小
height=floor(h*cos(angle)+w*sin(angle));
width=floor(h*sin(angle)+w*cos(angle));
p=zeros(height,width);
% 变换矩阵
G=[ cos(angle), -sin(angle), sin(angle);...
sin(angle), cos(angle), 0;...
0, 0, 1];
for x0=1:1:w
for y0=1:1:h
t=[x0;y0;h];
A=G * t;
x=floor(A(1)+0.5);
y=floor(A(2)+0.5);
if x>=1 && x<=width && y>=1 && y<=height
p(x,y)=img(x0,y0);
end
end
end
end
原来的公式是绕着 $(0,0)$ 点旋转的,我现在的是绕着图片中心旋转的。
关于填洞洞。本来想说,把洞洞填上不就好了……如果这个点的值为0那么就取左边啊就当作线性插值了……说的简单啊!自己怎么都写不好。
用滤波器吧。做个平滑滤波啊什么的,结果失败了,图片特别模糊。用了一个维纳滤波,继续失败——黑点点还是黑点点,一点都没有减少,但是图像已经模糊不清了。
然后就用了一个 $Q\gt0$ 的逆谐波滤波器:
p=imfilter(p.^(Q+1),fspecial('average',3))./imfilter(p.^Q,fspecial('average',3));
效果还好,只是有点模糊。
然后又用了中值滤波器:
p=medfilt2(p);
效果也不错,只是图片还是模糊的,不如上面的好。
就这样把不改了。反正用imrotate()
就好了,不是么……
发表回复