【问题标题】:Indexing issue in MATLAB (image processing)MATLAB 中的索引问题(图像处理)
【发布时间】:2015-11-25 22:33:33
【问题描述】:

我正在处理一种预测块匹配运动估计算法。这意味着,运动矢量的值是使用先前找到的值找到的,我被一件非常琐碎的事情困住了。

我正在处理分成块的图像,所以我应该为每个块有一个运动矢量。我创建了一个2xN 矩阵motion_vectors,其中N 是所有块的数量(blocks_in_the_first_row*blocks_in_the_first_column)。第一行是x 坐标,第二行是运动矢量的y 坐标。

我有 2 个预测器来帮助估计当前块的运动向量。 如果我当前的块位于(i,j) 位置,那么预测变量的位置是(i, j-1)(“顶部”块)和(i-1, j)(左侧块)。

我的问题是,由于尺寸不同(一个是2xN 矩阵,另一个是@ 987654332@)。我也不想改变motion_vectors 的尺寸,因为那时我需要一个两“层”数组。一个用于x 坐标,一个用于y,但这不适合进一步的设计。

我希望我让自己可以理解,如果没有,请告诉我。

感谢您提供任何线索!

【问题讨论】:

  • 预测中的每个块都被分配了相同的运动向量。因此,如果您发现一个 8 x 8 块的运动矢量为...比如说...(2,2),则该块中的所有像素移动(2,2)。另外,你能告诉我们你尝试了什么吗?它将帮助我更快地获得解决方案,因为我可以将它集成到您​​现有的代码中,而不必从头开始编写一个并做出(可能)不正确的假设。

标签: matlab image-processing indexing motion-detection


【解决方案1】:

如果您正在访问motion_vectors 的元素,您将获得有关相应块的数据。这意味着在索引1N(其中Nblocks_in_row*blocks_in_column)和特定块之间存在一个转换系统。如果索引1 是左上角的块,索引2 是其右侧的块,并且随着阅读一本书而递增(从左到右并换行到下一行),那么您将翻译如下:

row_of_block = floor((index_in_motion_vector-1)/number_of_columns) + 1  
col_of_block = mod((index_in_motion_vector-1), number_of_columns) + 1

(这称为行优先排序。)

如果索引1 是左上角的块,而索引2 是它下面的块,并且在完成一个后换行到下一列的顶部,那么转换将是

row_of_block = mod((index_in_motion_vector-1), number_of_rows) + 1
col_of_block = floor((index_in_motion_vector-1)/number_of_rows) + 1

(这称为列优先排序,是 MATLAB 默认使用的。)

因此,如果您将 1 迭代到 N,则可以只使用这些转换。如果你想迭代 1number_of_rows1number_of_columns,你会做相反的事情。

如果您使用块的书状索引(行优先排序),则转换为运动矢量的索引将是

col_in_motion_vector = (row_of_block-1)*number_of_columns + column_of_block

如果您使用第二种自上而下的索引块方法(列优先排序),则转换将改为

col_in_motion_vector = (column_of_block-1)*number_of_rows + row_of_block

【讨论】:

  • 谢谢!!是的,我想增加阅读一本书。我是否遗漏了什么,或者我也可以简单地在列col_of_block = index_in_motion_vector % number_of_columns 的情况下使用(在 MATLAB 语法中为col_of_block = mod(index_in_motion_vector, number_of_columns)),还是在某些情况下需要减法和加法?
  • 感谢您提到 mod vs. %;你不想在你的代码中使用 cmets!减法和加法是必要的,因为 MATLAB 从索引 1 而不是 0 开始,这可能会导致某些情况失败。例如:如果您有 10 列,并且运动向量中的索引为 10,那么仅使用不带 -1 和后续 +1 的 mod 将给您 10%10 = 0 作为 col_of_block 的答案,这不是MATLAB 中的有效索引。相反,执行((10-1)%10 + 1) 会给你正确的结果:10
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多