Найдите точку максимальной интенсивности от центра во всех направлениях в матрице Matlab

У меня есть изображения (матрица) в 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;

Ошибка также в том, что вычисляемый центр не одинаков на всех изображениях...


person Antoine Trappeur    schedule 28.04.2016    source источник
comment
непонятно, что вы пытаетесь сделать. Вы можете добавить пример изображения и иллюстрацию того, что вы ищете?   -  person Shai    schedule 28.04.2016
comment
Рассмотрим центр изображения. Я хочу найти точку максимальной интенсивности каждого вектора из центра во всех направлениях. 360 векторов для поворота на 360 градусов и найти для каждого положение максимума и получить его в исходном изображении   -  person Antoine Trappeur    schedule 28.04.2016
comment
Первое, что приходит мне в голову, это вставить ваше изображение в большую матрицу, заполненную нулями, а затем применить imrotate   -  person BillBokeey    schedule 28.04.2016
comment
Большое спасибо, я сделал это, и это работает! Спасибо.   -  person Antoine Trappeur    schedule 28.04.2016


Ответы (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));

Теперь у вас есть все профили от центра, вы можете искать максимальную интенсивность вдоль каждого.

person Shai    schedule 28.04.2016
comment
Хм, почему бы и нет, но all_end_points не в двух измерениях... и мне нужно получить исходное положение каждого максимума. Мне нужно окончательное изображение со всеми точками максимума. - person Antoine Trappeur; 28.04.2016