在matlab矩阵的所有方向上从中心找到最大强度点

Find maximum intensity point from center in all directions in matlab matrix

我在matlab中有图像(矩阵),我在每个方向上从矩阵中心寻找最大强度点以获得边缘。 (我用的是图片的渐变,求四边形)

对于 M (n,m) 我的第一个尝试是考虑一个向量 M(1:n/2, m/2),寻找最大值并旋转图像以找到所有其他方向上的所有最大值。 但是:imrotate 函数会导致很多错误(裁剪或松动),并且重建图像与原始图像的形状不符。

我也尝试过直接考虑原始图像中从中心到周边所有点的向量...但这并不容易!

你有解决这个问题的想法吗?我不知道 Matlab 中的任何微妙之处?

谢谢你;

我的实际代码是

 s_im = size(ima, 2)/2;
 ima_max = zeros(size(ima));
 ima_new = zeros(size(ima));    


  for a=0:359
    im_r = imrotate(ima, a, 'crop');
    c= floor(size(im_r,1)/2);
    vect_h1 = im_r(c, 1:c);
    l = length(vect_h1);


    [~, id_h1] = max(vect_h1(:));

    [x,y] = rotatePoint([id_h1, c], [c,c], deg2rad(a-180));       
    ima_max(floor(y), floor(x))= 1;
    ima_new(floor(y), floor(x)) = 1;

一个错误是计算的中心在所有图像中都不相同...

我想你可以使用 improfile 来获得沿着从中心像素发射的光线的强度:

sz = size(ima);
X = sz(2);
Y = sz(1);
all_end_points = cat(1, [ones(1,Y); 1:Y]', ...
                        [1:X; Y*ones(1,X)]', ...
                        [X*ones(1,Y); Y:-1:1]', ...
                        [X:-1:1; ones(1,X)]' );
cent = repmat( [X/2 Y/2], [size(all_end_points,1), 1]);
all_profs = improfile(ima, all_end_points(:,1), all_end_points(:,2));

现在您拥有中心的所有配置文件,您可以沿着每个配置文件寻找最大强度。