如何在同一位置旋转包含内容的图像?

时间:2015-08-12 08:32:08

标签: matlab image-processing

我有一张如下图片

enter image description here

然后我想旋转它,但我不希望它的位置被改变。 例如,输出应如下所示

enter image description here

如果我imrotate,它将改变其立场。有没有其他方法可以旋转它而不改变它的位置?

1 个答案:

答案 0 :(得分:3)

imrotate功能可以围绕指定的角度旋转整个图像。你想要的只是旋转图像的一部分。为此,您必须指定要旋转的部分。从形式上讲,这是该符号所在的矩形。

通过选择所有行和列,可以找到此矩形的坐标,其中任何像素都是黑色。这可以通过获取所有行的总和,在那里找到第一个和最后一个非零条目,并在所有列上执行相同的操作来完成。

sx=find(sum(im==0,1),1,'first');
ex=find(sum(im==0,1),1,'last');
sy=find(sum(im==0,2),1,'first');
ey=find(sum(im==0,2),1,'last');

然后是图像的相关部分

im(sy:ey,sx:ex)

现在,您只能旋转图像的这一部分并将其保存到整个图像中的相同位置:

im(sy:ey,sx:ex) = imrotate(im(sy:ey,sx:ex),180);

带有所需的结果:

result

注意:这仅适用于180°角度,例如您提供的示例。如果您旋转任何其他角度,例如90°甚至任意角度,例如23°,imrotate的输出与输入的大小不同,因此赋值im(sy:ey,sx:ex) = ...将始终抛出错误。