我在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;
错误也是计算出的中心在所有图像中都不相同......
答案 0 :(得分:2)
我想您可以使用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));
现在您拥有来自中心的所有配置文件,您可以查找每个配置文件的最大强度。