在 Matlab 中从矩阵构建地图
我有一个矩阵 A,它保存有界范围 (0..255) 内的整数,我需要构建一个表,将值 (0..255) 映射到保存该值的矩阵中的所有坐标。
实现这一目标的最佳方法是什么? - 我考虑过使用containers.Map来完成任务,但Map不支持每个键多个值。我本来可以使用列表,但这似乎效率低下,因为我必须在每次迭代时创建一个新列表。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
矢量化解决方案,提供与解决方案相同的输出来自 Mikhail 的方法是使用 SORT 函数,转换从 排序 到下标索引中>IND2SUB,并使用函数 ACCUMARRAY 和 MAT2CELL:
现在,对于给定的整数值
iValue
,您可以获得包含y
(第一列)的N
×2 矩阵通过执行以下操作,获取图像中具有该值的x
(第二列)像素的坐标:此外,如果您感兴趣,您还可以制作使用函数STRUCT:
然后您可以访问
x
和y
坐标值为iValue
的像素如下:A vectorized solution, which gives the same output as the solution from Mikhail, is to sort all the pixel values in your image using the SORT function, convert the linear indices returned from SORT into subscripted indices using the function IND2SUB, and collect them together into a single cell array using the functions ACCUMARRAY and MAT2CELL:
Now, for a given integer value
iValue
you can get theN
-by-2 matrix containing they
(first column) andx
(second column) coordinates for theN
pixels in the image with that value by doing the following:In addition, just in case you're interested, you could also make
map
a structure array with fieldsx
andy
using the function STRUCT:And you can then access the
x
andy
coordinates for pixels with a valueiValue
as follows:使用元胞数组怎么样?您可以使用整数对其进行索引。例如:
在此示例中,索引 0 位于
1,1
和13,56
的矩阵中,索引 1 位于无矩阵中,索引 2 位于4,5< 中/code>
您的单元格将有 256 个元素(我的单元格有 3 个),要访问,您只需在索引中添加 1 即可。
您还可以线性存储索引,因此填充表的代码为:
What about using a cell array? You can index it with integers. For example:
In this example index 0 is in the matrix in
1,1
and13,56
, index 1 in none and index 2 in4,5
Your cell would have 256 elements (mine has 3) and to acces you would simply add 1 to the index.
You could also store indices linearly so the code to fill the table would be:
好吧,我写了以下内容,它似乎在合理的时间内发挥了作用。我认为解决这个问题的方法是根据每个值的直方图预先分配元胞数组:
访问表有点烦人:
访问值为 200 的所有坐标。
Well, I wrote the following and it seems to work in reasonable time. I think the thing that does the trick is preallocating the cell arrays based on the histogram for each value:
Accessing the table is a bit annoyting though :
to access all coordinates with value 200.