Ответ 1
Максимальная площадь диска, как думает @beaker, определяется максимальной заполненной кружкой, которая помещается внутри ограничивающей рамки изображения. Это можно увидеть из рисунка 3 б) статьи.
Еще одна вещь, которую вы сделали неправильно, использует детектор края edge(grey, 'sobel')
, в то время как вы должны использовать карту градиента или более формально градиентную величину. Здесь код, который создает кривую, близкую к тому, что показано на рис. 3d. Как определить его до шести пиков, остается вопрос.
A = imread( 'Layer-5.png' ); % image from the article
A = double(rgb2gray( A ));
% gradient magnitude
dx = imfilter(A,fspecial('sobel') ); % x, 3x3 kernel
dy = imfilter(A,fspecial('sobel')'); % y
gradmag = sqrt( dx.^2 + dy.^2 );
% mask by disk
R = min( size(A)/2 ); % radius
disk = insertShape(zeros(size(A)),'FilledCircle', [size(A)/2,R] );
mask = double(rgb2gray(disk)~=0);
gradmag = mask.*gradmag;
% radon transform
theta = linspace(0,180,180);
vars = zeros(size(theta));
for u = 1:length(theta)
[rad,xp] =radon( gradmag, theta(u) );
indices = find( abs(xp)<R );
% ignore radii outside the maximum disk area
% so you don't sum up zeroes into variance
vars(u) = var( rad( indices ) );
end
vars = vars/norm(vars);
figure; plot( vars );
Помните, что изображения, скопированные из статьи, появляются с артефактами jpg. После хорошего шумоподавления (здесь слишком много), например,
вы получите гораздо более заметные результаты.