- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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/
我有这个函数来计算一个 3*3 block 的二进制模式的值,结果是用中心像素对 8 个相邻像素进行阈值处理并返回两个输出:二进制代码的十进制值,如果它是统一的则相同的十进制值如果不是,则为 59。
我喜欢blockproc ,它使处理大(非常大)图像变得容易。然而,据我所知,它仅限于使用与输入大小相同的输出矩阵的函数。 所以我想知道是否有一种方法可以复制/模拟 blockproc 所做的事情,但
我一直在使用 blockproc用于按 block 处理图像。不幸的是,blockproc 是图像处理工具箱的一部分,我的个人电脑上没有。 在基础 Matlab 中是否有可以替代 blockproc
编辑:这是一张图片,所以建议的 ( How can I efficiently process a numpy array in blocks similar to Matlab's blkproc
当我使用 blockproc 函数的这个参数时,我很难理解发生了什么: 当我尝试一个简单的函数时 fun = @(block) mean(mean(block.data)); im4 = blockp
在 Matlab 中,我有一个 3D 矩阵(超过 100 帧 512x512)。我的目标是通过整个超矩阵找到一些具有代表性的点。为此,我采用了传统的(效率不高的)方法:将大矩阵分割为更小的子矩阵,然后
Blockproc是在 MATLAB 中“网格化”图像的一个非常有用的函数。它有很好的文档记录,甚至还带有 tutorial page。 .但是,当您希望 block 之间有某种重叠时,事情就变得棘手
我正在寻找一种很好的方法来有效地将图像划分为小区域,分别处理每个区域,然后将每个处理的结果重新组合成一个处理后的图像。 Matlab 有一个名为 blkproc 的工具。 (替换为 blockproc
我是一名优秀的程序员,十分优秀!