【问题标题】:Rotating image with trigonometric functions and image padding使用三角函数和图像填充旋转图像
【发布时间】:2020-11-05 06:20:13
【问题描述】:

在使用三角函数旋转图像时,我们使用图像填充。

如果我们在没有填充的情况下旋转,我们会得到这样的图片:

如果我们填充图片, 例如使用这些代码:

`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];`

我们有这张照片,

首先,我想了解这段代码是如何工作的? 其次,我们使用图像填充实现了什么?

【问题讨论】:

    标签: matlab image-processing image-rotation zero-padding


    【解决方案1】:

    图像填充

    下面的这个游乐场脚本可能有助于了解零填充。这里使用的填充是顶部和底部填充的图像高度的一半和侧面填充的图像宽度的一半。本质上,填充是将零(黑色像素)数组连接到图像的两侧。在这种情况下,它允许在不裁剪图像的情况下旋转图像。填充的图像将有一些边距,以便角落在旋转时不会溢出图像的边界。使用padarray() 函数可以达到相同的结果,这也是一种合适的方法。关于轮换的具体细节见:Rotating image with trigonometric functions

    使用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 运行

    【讨论】:

    • 我正在回顾我提出的问题。在这个答案中,我没有理解一个部分: Side_Padding=zeros(Image_Height+2*size(Padding_Bottom_And_Top,1),Image_Width/2,Number_Of_Colour_Channels);特别是你能详细说明这部分:Image_Height+2*size(Padding_Bottom_And_Top,1
    • 这些是用于图像边缘的零填充数组,zeros() 函数内部只是这些数组相对于Image_HeightImage_Width 的高度和宽度。例如,如果我想要一个 2 x 5 的零填充数组,则函数的输入为:zeros(2,5)
    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    相关资源
    最近更新 更多