gpt4 book ai didi

algorithm - 在 Matlab 中使用 BLOCKPROC 查找最大像素

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:30 25 4
gpt4 key购买 nike

Matlab 中,我有一个 3D 矩阵(超过 100 帧 512x512)。我的目标是通过整个超矩阵找到一些具有代表性的点。为此,我采用了传统的(效率不高的)方法:将大矩阵分割为更小的子矩阵,然后寻找具有最高值的像素。这样做之后,我将子矩阵中那个像素的那些相对坐标更改为引用大矩阵的全局坐标。

现在,我正在重新设计算法。我已经看到,为了逐 block 分析大型矩阵(这实际上是我用我的旧算法所做的),BLOCKPROC 函数非常有效。我已经阅读了文档,但我不知道应该如何实现“有趣”函数来提取每个 block 中具有最高值的像素。提前谢谢你。

*我正在尝试获取引用全局矩阵的那些最大像素的坐标,我真的不关心它们的值。

最佳答案

首先定义一个函数来查找(子)矩阵的最大值的位置:

function loc = max_location(M);
[~, ii] = max(M(:));
[r c] = ind2sub(size(M),ii);
loc = [r c];

然后使用

blockproc(im, blocksize, @(x) x.location+max_location(x.data)-1)

im 是您的图像(二维数组),blocksize 是指定 block 大小的 1x2 向量。在 blockproc 中,data 字段是子矩阵(您传递给 max_location),location 字段包含子矩阵左上角的坐标(将其添加到 max_location 的结果中,减去 1)。

例子:

>> blocksize = [3 3];

>> im = [ 0.3724 0.0527 0.4177 0.6981 0.0326 0.4607
0.1981 0.7379 0.9831 0.6665 0.5612 0.9816
0.4897 0.2691 0.3015 0.1781 0.8819 0.1564

0.3395 0.4228 0.7011 0.1280 0.6692 0.8555
0.9516 0.5479 0.6663 0.9991 0.1904 0.6448
0.9203 0.9427 0.5391 0.1711 0.3689 0.3763 ];

>> blockproc(im, blocksize, @(x) x.location+max_location(x.data)-1)

ans =
2 3 2 6
5 1 5 4

意味着您的 block 最大值位于坐标 (2,3)、(5,1)、(2,6) 和 (5,4)

关于algorithm - 在 Matlab 中使用 BLOCKPROC 查找最大像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21305443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com