kar*_*l71 0 algorithm matlab block image-processing
在Matlab中,我有一个3D矩阵(超过100帧512x512).我的目标是通过整个超矩阵找到一些代表点.为此,我实现了传统的(并不是非常有效的)方法:我将大矩阵细分为更小的子矩阵,然后我寻找具有最高值的像素.在这之后,我将子矩阵中该像素的相对坐标更改为参考大矩阵的全局坐标.
现在,我正在重新设计算法.我已经看到,为了逐块分析一个大矩阵(实际上我正在使用我的旧算法),BLOCKPROC函数非常有效.我已经阅读了文档,但我不知道应该如何实现"有趣"功能来提取每个块具有最高值的像素.先感谢您.
*我正在尝试获取参考全局矩阵的那些最大像素的坐标,我真的不关心它们的值.
首先定义一个函数来查找(子)矩阵的最大位置:
function loc = max_location(M);
[~, ii] = max(M(:));
[r c] = ind2sub(size(M),ii);
loc = [r c];
Run Code Online (Sandbox Code Playgroud)
然后用
blockproc(im, blocksize, @(x) x.location+max_location(x.data)-1)
Run Code Online (Sandbox Code Playgroud)
im
您的图像在哪里(2D数组),blocksize
是指定块大小的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
Run Code Online (Sandbox Code Playgroud)
意味着你的区块最大值位于坐标(2,3),(5,1),(2,6)和(5,4)