默认情况下,MATLAB函数可旋转图像,旋转部分填充黑色。请参阅此http://in.mathworks.com/help/examples/images_product/RotationFitgeotransExample_02.png
我们也可以使用white background旋转图像。
问题是,我们可以旋转图像(使用或不使用imrotate)填充原始图像的背景吗?
特定于我的问题:具有非常小的旋转角度(<= 5度)的彩色图像
答案 0 :(得分:4)
这是一种天真的方法,我们只需将相同的旋转应用于蒙版,并仅拍摄旋转图像中与变换后的蒙版相对应的部分。然后我们只是将这些像素叠加在原始图像上。 我忽略了边界上可能的混合。
A = imread('cameraman.tif');
angle = 10;
T = @(I) imrotate(I,angle,'bilinear','crop');
%// Apply transformation
TA = T(A);
mask = T(ones(size(A)))==1;
A(mask) = TA(mask);
%%// Show image
imshow(A);
答案 1 :(得分:2)
您可以使用padarray()
功能'replicate'
和'both'
选项来插入图片。然后您可以使用imrotate()
函数。
在下面的代码中,我使用ceil(size(im)/2)
作为填充尺寸;但你可能想要更大的垫尺寸来消除黑色部分。我还使用s
和S
(写imR(S(1)-s(1):S(1)+s(1), S(2)-s(2):S(2)+s(2), :)
)裁剪图像,您可以在其中提取较大部分的图像,只需扩展下面使用的索引I的边界{{1 }}
试试这个:
imR
这给出了下面的输出:
不是那么好,但比黑色的东西更好..