使用三角函数和图像填充旋转图像
Rotating image with trigonometric functions and image padding
在使用三角函数旋转图像时,我们正在使用图像填充。
如果我们在没有填充的情况下旋转,我们会得到这张图片:
如果我们填充图片,
例如这些代码:
`Padding_Bottom_And_Top = zeros(round(Image_Height/2),Image_Width,3);
Side_Padding = zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,3);
Side_Padding =zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,3);
Padded_Image = [Padding_Bottom_And_Top; Original_Image];
Padded_Image = [Padded_Image; Padding_Bottom_And_Top];
Padded_Image = [Side_Padding Padded_Image];
Padded_Image = [Padded_Image Side_Padding];`
我们有这张照片,
首先,我想了解这段代码是如何工作的?
其次,我们使用图像填充实现了什么?
图像填充
下面的 playground 脚本可能有助于 zero-padding 正确看待。这里使用的填充是顶部和底部填充图像高度的一半,以及侧面填充图像宽度的一半。本质上,填充是将零(黑色像素)数组连接到图像的两侧。在这种情况下,它允许在不裁剪图像的情况下旋转图像。填充后的图像将有一些边距,以便角在旋转时不会溢出图像的边界。使用padarray()
函数可以达到同样的效果,也是一种合适的方法。有关旋转的详细信息,请参阅:
使用 padarray()
函数的替代方法:
clf;
Original_Image = imread("peppers.png");
[Image_Height,Image_Width,Number_Of_Colour_Channels] = size(Original_Image);
Padded_Image = padarray(Original_Image,[Image_Height/2 Image_Width/2],0,'both');
imshow(Padded_Image);
游乐场脚本:
clf;
Original_Image = imread("peppers.png");
[Image_Height,Image_Width,Number_Of_Colour_Channels] = size(Original_Image);
Padding_Bottom_And_Top = zeros(round(Image_Height/2),Image_Width,Number_Of_Colour_Channels);
Side_Padding = zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,Number_Of_Colour_Channels);
subplot(2,4,1); imshow(Padding_Bottom_And_Top);
title("Top and Bottom Padding");
subplot(2,4,2); imshow(Side_Padding);
title("Side Padding");
Padded_Image = [Padding_Bottom_And_Top; Original_Image];
subplot(2,4,5); imshow(Padded_Image);
title("Top Padding");
Padded_Image = [Padded_Image; Padding_Bottom_And_Top];
subplot(2,4,6); imshow(Padded_Image);
title("Top and Bottom Padding");
Padded_Image = [Side_Padding Padded_Image];
subplot(2,4,7); imshow(Padded_Image);
title("Top, Bottom and Left Padding");
Padded_Image = [Padded_Image Side_Padding];
subplot(2,4,8);imshow(Padded_Image);
title("Top, Bottom, Left and Right Padding");
运行 使用 MATLAB R2019b
在使用三角函数旋转图像时,我们正在使用图像填充。
如果我们在没有填充的情况下旋转,我们会得到这张图片:
如果我们填充图片, 例如这些代码:
`Padding_Bottom_And_Top = zeros(round(Image_Height/2),Image_Width,3);
Side_Padding = zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,3);
Side_Padding =zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,3);
Padded_Image = [Padding_Bottom_And_Top; Original_Image];
Padded_Image = [Padded_Image; Padding_Bottom_And_Top];
Padded_Image = [Side_Padding Padded_Image];
Padded_Image = [Padded_Image Side_Padding];`
我们有这张照片,
首先,我想了解这段代码是如何工作的? 其次,我们使用图像填充实现了什么?
图像填充
下面的 playground 脚本可能有助于 zero-padding 正确看待。这里使用的填充是顶部和底部填充图像高度的一半,以及侧面填充图像宽度的一半。本质上,填充是将零(黑色像素)数组连接到图像的两侧。在这种情况下,它允许在不裁剪图像的情况下旋转图像。填充后的图像将有一些边距,以便角在旋转时不会溢出图像的边界。使用padarray()
函数可以达到同样的效果,也是一种合适的方法。有关旋转的详细信息,请参阅:
使用 padarray()
函数的替代方法:
clf;
Original_Image = imread("peppers.png");
[Image_Height,Image_Width,Number_Of_Colour_Channels] = size(Original_Image);
Padded_Image = padarray(Original_Image,[Image_Height/2 Image_Width/2],0,'both');
imshow(Padded_Image);
游乐场脚本:
clf;
Original_Image = imread("peppers.png");
[Image_Height,Image_Width,Number_Of_Colour_Channels] = size(Original_Image);
Padding_Bottom_And_Top = zeros(round(Image_Height/2),Image_Width,Number_Of_Colour_Channels);
Side_Padding = zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,Number_Of_Colour_Channels);
subplot(2,4,1); imshow(Padding_Bottom_And_Top);
title("Top and Bottom Padding");
subplot(2,4,2); imshow(Side_Padding);
title("Side Padding");
Padded_Image = [Padding_Bottom_And_Top; Original_Image];
subplot(2,4,5); imshow(Padded_Image);
title("Top Padding");
Padded_Image = [Padded_Image; Padding_Bottom_And_Top];
subplot(2,4,6); imshow(Padded_Image);
title("Top and Bottom Padding");
Padded_Image = [Side_Padding Padded_Image];
subplot(2,4,7); imshow(Padded_Image);
title("Top, Bottom and Left Padding");
Padded_Image = [Padded_Image Side_Padding];
subplot(2,4,8);imshow(Padded_Image);
title("Top, Bottom, Left and Right Padding");
运行 使用 MATLAB R2019b