2012-11-13 12 views
5

enter image description hereएक छवि

में एक चक्र के केंद्र के लिए निर्देशांक गिना जा रहा है मैं इस छवि है कहो और मैं (एक्स, वाई) में प्रत्येक चक्र के केंद्र प्राप्त करना चाहते हैं।

क्या मैटलैब में ऐसा करने के लिए कोई एल्गोरिदम है ??

उत्तर

2

: प्रथम स्तंभ एक्स स्थिति है, दूसरे स्तंभ केन्द्रों में से y-स्थिति है फ़िल्टर के रूप में कृत्रिम सर्कल के साथ क्रॉस-सहसंबंध का उपयोग करने का परिणाम यहां दिया गया है।

>> disp(centers) 
     483  1347 
     460   662 
     478  1001 
     451   290 

कोई विस्तृत टिप्पणी है, कहें यह आवश्यक: परिणाम [पंक्ति, स्तंभ] ऊपरी बाएँ कोने से है।

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 

enter image description here

+0

जिस व्यक्ति ने कोड का इस्तेमाल किया, उसने कहा कि यह काम करता है और उसने पूछा "मुझे प्लॉट कमांड कहां रखा जाना चाहिए और किस चर का उपयोग किया जाना चाहिए?" – HSN

+1

यह 'आकृति, imagesc (imf_orig) द्वारा किया जाता है; colorbar; '। जाहिर है, 'imf_orig' की गणना के बाद। – Serg

1

मुझे विश्वविद्यालय में ऐसा करना याद है, कई साल पहले!

हमने जो किया वह सीमा तय करने और सब कुछ काला और सफ़ेद बनाने के लिए किया गया था। फिर, हमने सफेद क्षेत्र (गैर-सर्कल) को उड़ा दिया ताकि यह मंडलियों पर फैल सके।

जब वे गायब होने लगे, तो हमारे पास निर्देशांक थे।

आप परिधि पर दो बिंदु भी चुन सकते हैं, उनके बीच की रेखा के सटीक मध्य को ढूंढ सकते हैं और फिर उस बिंदु के माध्यम से एक लंबवत रेखा खींच सकते हैं। यदि नई लाइन का मध्य सर्कल का केंद्र है।

+0

क्या आप मुझे अधिक के बारे में "blobing" .. बता मेरी अज्ञानता माफ कर दो नहीं बल्कि मेरे दोस्त की ओर से इस सवाल पूछने matlab और im में है कि अच्छा im कर सकते हैं ... खुराक यह इसके साथ कुछ करने के लिए है ?? http://www.commsp.ee.ic.ac.uk/~jahangiri/Blobdetector.html – HSN

5

कि के साथ एक 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 

अब centre शामिल एक Nx2 सरणी:

centre = 

    289.82  451.73 
    661.41  461.21 
    1000.8  478.01 
    1346.7  482.98 
+0

उन्हें इस त्रुटि का सामना करना पड़ा है http://www4.0zz0.com/2012/11/13/21/243181924। jpg – HSN

+1

आपको पुराने संस्करण का उपयोग करना होगा, अगर आप त्रुटि बताते हैं तो क्या होता है: 'आँकड़े = क्षेत्रप्रॉप (bwlabel (imgbw),' centroid ',' area '); '? –