Obliczanie współrzędne środka okręgu w obrazie
Say mam ten obraz i chcę, aby uzyskać środek każdego koła w (x, y).
Czy istnieje algorytm, aby to zrobić w MATLAB ??
Obliczanie współrzędne środka okręgu w obrazie
Say mam ten obraz i chcę, aby uzyskać środek każdego koła w (x, y).
Czy istnieje algorytm, aby to zrobić w MATLAB ??
Oto wynik zastosowania korelacji krzyżowej ze sztucznym kołem jako filtrem. Rezultatem jest [wiersz, kolumna] od lewego górnego rogu:
>> disp(centers)
483 1347
460 662
478 1001
451 290
Nie ma szczegółowe komentarze, poproś to wymagane.
im = rgb2gray(im2double(imread('D:/temp/circles.jpg')));
r = 117; % define radius of circles
thres_factor = 0.9; % see usage
%%
[x, y] = meshgrid(-r : r);
f = sqrt(x .^ 2 + y .^ 2) >= r;
%%
im = im - mean(im(:));
im = im/std(im(:));
f = f - mean(f(:));
f = f/std(f(:))/numel(f);
imf_orig = imfilter(im, f, 'replicate');
%% search local maximas
imf = imf_orig;
[n_idx, m_idx] = meshgrid(1 : size(imf, 2), 1 : size(imf, 1));
threshold = thres_factor * max(imf(:));
centers = []; % this is the result
while true
if max(imf(:)) < threshold
break;
end
[m, n] = find(imf == max(imf(:)), 1, 'first');
centers = cat(1, centers, [m, n]);
% now set this area to NaN to skip it in the next iteration
idx_nan = sqrt((n_idx - n) .^ 2 + (m_idx - m) .^ 2) <= r;
imf(idx_nan) = nan;
end
Przypominam sobie, że robię to na uniwersytecie, wiele lat temu!
Co zrobiliśmy było zastosować próg i zrobić wszystko w czerni i bieli. Następnie usunęliśmy biały obszar (nieokrągły), aby rozprzestrzenił się na koła.
Kiedy zaczęli znikać, mieliśmy współrzędne.
Można również wybrać dwa punkty na obwodzie, znaleźć dokładny środku linii między nimi, a następnie narysować linię prostopadłą przez ten punkt. Jeśli w środku nowej linii jest środek okręgu.
może mi Pan powiedzieć więcej o „blobing” .. Wybacz moją ignorancję, ale nie jestem tak dobry w Matlab i im z tym pytaniem w imieniu mojego przyjaciela ... dawka go mieć z tym coś wspólnego? http://www.commsp.ee.ic.ac.uk/~jahangiri/Blobdetector.html – HSN
to możliwe, przez jeden wywołanie regionprops:
img = imread('KxJEJ.jpg'); % read the image
imgbw = ~im2bw(img,graythresh(img)); % convert to grayscale
stats = regionprops(bwlabel(imgbw), 'centroid','area'); % call regionprops to find centroid and area of all connected objects
area = [stats.Area]; % extract area
centre = cat(1,stats.Centroid); % extract centroids
centre = centre(area>10,:); % filter out dust specks in the image
teraz centre
zawiera Nx2
tablicy: pierwszej kolumnie X-pozycji, druga kolumna y położenie punktów:
centre =
289.82 451.73
661.41 461.21
1000.8 478.01
1346.7 482.98
napotkał ten błąd http://www4.0zz0.com/2012/11/13/21/243181924. jpg – HSN
musisz używać starszej wersji, co się stanie, jeśli dodasz sugestię błędu: 'stats = regionprops (bwlabel (imgbw), 'centroid', 'area');'? –
Facet, który wykorzystał kod powiedział, że pracował i poprosił „Gdzie należy umieścić polecenie wydruku i która zmienna jest używana?” – HSN
odbywa się to za pomocą 'figure, imagesc (imf_orig); colorbar; '. Oczywiście po obliczeniu 'imf_orig'. – Serg