【问题标题】:Matlab 3D Sort by H then S then VMatlab 3D按H然后S然后V排序
【发布时间】:2020-06-09 11:13:15
【问题描述】:

在 Matlab 中,我想按特定顺序对颜色值进行排序。 例如,按色调排序,然后是饱和度,然后是强度 (V)。或者,V,H,S。

类似这样的:

% UNSORTED 
A(:,:,1) = [1 1 1 1 1 2 2 2 1 1 1]; 
A(:,:,2) = [1 1 1 1 1 3 2 2 3 2 2];
A(:,:,3) = [3 1 4 3 2 1 2 1 1 2 1];

% RESULT 
A(:,:,1) = [1 1 1 1 1 1 1 1 2 2 2]
A(:,:,2) = [1 1 1 1 1 2 2 3 2 2 3]
A(:,:,3) = [1 2 3 3 4 1 2 1 1 2 1]

我在这方面苦苦挣扎了一天,没有运气。有什么帮助吗?

【问题讨论】:

  • 你真的需要 A 作为 1x11x3 数组吗?为什么不是 11x3?
  • 我把问题简单化了,请看下面更合适的 MxNx3 案例,谢谢。
  • 那么想要的结果是什么?请举一个例子,包括所需的输出;并通过编辑您的问题来做到这一点,而不是作为答案

标签: matlab sorting colors


【解决方案1】:

一种方法可能是:

% UNSORTED 
A(:,:,1) = [1 1 1 1 1 2 2 2 1 1 1]; 
A(:,:,2) = [1 1 1 1 1 3 2 2 3 2 2];
A(:,:,3) = [3 1 4 3 2 1 2 1 1 2 1];

for ii = 1:size(A,1)
    A(ii,:,:) = reshape(sortrows(squeeze(A(ii,:,:)),[1:3]),[1,size(A,2),size(A,3)])
end

所以我们提取每个二维矩阵,我们使用squeeze 删除单维,然后我们使用sortrows 对每一行进行排序(优先级为1->2->3)。最后我们reshape这个2D矩阵来恢复单维,得到一个3D矩阵。

【讨论】:

  • 这在将 3D 图像矩阵重新整形为 A 在这里的样子之后工作,然后将排序后的图像重新整形为原始图像!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 2016-01-15
  • 2016-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多