【问题标题】:Flipping image across the y axis沿 y 轴翻转图像
【发布时间】:2021-02-13 20:01:27
【问题描述】:

我需要编写一个在 y 轴上翻转图像的代码。此代码正在运行,但它将图像转换为灰度。我希望它保持在 RGB 中。最后,我无法使用任何功能。 (旋转等)

subplot(1,2,1);
imshow(A);
title('original')
 
[r c ~]= size(A)
 
for i=1:r
   for j=1:c
       Aa(i,j)=A(i,c-j+1);
    end
end
 
subplot(1,2,2);
imshow(Aa);
title('flipped across vertical axis')

【问题讨论】:

  • fliplr 呢,也被禁止了?

标签: matlab image-processing flip yaxis


【解决方案1】:

您可以使用函数flip 沿一个轴翻转任意数组:

Aa = flip(A,2);

这适用于灰度图像和 RGB 图像。

这等效于 3D 数组(例如 RGB 图像)的以下索引表达式:

Aa = A(:,end:-1:1,:);

提示:如果要编写循环,请始终使内部循环成为循环第一个索引的循环。如果数组不适合缓存(例如任何正常大小的图像),这会产生巨大的速度差异。在 OP 中的代码中,两个循环应该颠倒以获得最佳缓存使用率。

【讨论】:

    【解决方案2】:

    如果你说它适用于一个维度,为什么不对 RGB 的所有 3 个维度使用相同的方法?

    subplot(1,2,1); imshow(A); title('original')
    
    [r c ~]= size(A)
    
    for dim=1:3
        for i=1:r
            for j=1:c
                Aa(i,j,dim)=A(i,c-j+1,dim);
            end
        end
    end
    
    subplot(1,2,2); imshow(Aa); title('flipped across vertical axis')
    

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2011-09-21
      • 2017-04-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多