我们可以在填充了原始图像背景颜色的MATLAB中旋转图像吗?

时间:2015-01-25 17:22:25

标签: matlab rotation image-rotation

默认情况下,MATLAB函数可旋转图像,旋转部分填充黑色。请参阅此http://in.mathworks.com/help/examples/images_product/RotationFitgeotransExample_02.png

我们也可以使用white background旋转图像。

问题是,我们可以旋转图像(使用或不使用imrotate)填充原始图像的背景吗?

特定于我的问题:具有非常小的旋转角度(<= 5度)的彩色图像

2 个答案:

答案 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);

Cameraman rotated

答案 1 :(得分:2)

您可以使用padarray()功能'replicate''both'选项来插入图片。然后您可以使用imrotate()函数。

在下面的代码中,我使用ceil(size(im)/2)作为填充尺寸;但你可能想要更大的垫尺寸来消除黑色部分。我还使用sS(写imR(S(1)-s(1):S(1)+s(1), S(2)-s(2):S(2)+s(2), :))裁剪图像,您可以在其中提取较大部分的图像,只需扩展下面使用的索引I的边界{{1 }}

试试这个:

imR

这给出了下面的输出:

enter image description here

不是那么好,但比黑色的东西更好..