में एक चक्र के केंद्र के लिए निर्देशांक गिना जा रहा है मैं इस छवि है कहो और मैं (एक्स, वाई) में प्रत्येक चक्र के केंद्र प्राप्त करना चाहते हैं।
क्या मैटलैब में ऐसा करने के लिए कोई एल्गोरिदम है ??
में एक चक्र के केंद्र के लिए निर्देशांक गिना जा रहा है मैं इस छवि है कहो और मैं (एक्स, वाई) में प्रत्येक चक्र के केंद्र प्राप्त करना चाहते हैं।
क्या मैटलैब में ऐसा करने के लिए कोई एल्गोरिदम है ??
: प्रथम स्तंभ एक्स स्थिति है, दूसरे स्तंभ केन्द्रों में से 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
मुझे विश्वविद्यालय में ऐसा करना याद है, कई साल पहले!
हमने जो किया वह सीमा तय करने और सब कुछ काला और सफ़ेद बनाने के लिए किया गया था। फिर, हमने सफेद क्षेत्र (गैर-सर्कल) को उड़ा दिया ताकि यह मंडलियों पर फैल सके।
जब वे गायब होने लगे, तो हमारे पास निर्देशांक थे।
आप परिधि पर दो बिंदु भी चुन सकते हैं, उनके बीच की रेखा के सटीक मध्य को ढूंढ सकते हैं और फिर उस बिंदु के माध्यम से एक लंबवत रेखा खींच सकते हैं। यदि नई लाइन का मध्य सर्कल का केंद्र है।
क्या आप मुझे अधिक के बारे में "blobing" .. बता मेरी अज्ञानता माफ कर दो नहीं बल्कि मेरे दोस्त की ओर से इस सवाल पूछने matlab और im में है कि अच्छा im कर सकते हैं ... खुराक यह इसके साथ कुछ करने के लिए है ?? http://www.commsp.ee.ic.ac.uk/~jahangiri/Blobdetector.html – HSN
कि के साथ एक 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
उन्हें इस त्रुटि का सामना करना पड़ा है http://www4.0zz0.com/2012/11/13/21/243181924। jpg – HSN
आपको पुराने संस्करण का उपयोग करना होगा, अगर आप त्रुटि बताते हैं तो क्या होता है: 'आँकड़े = क्षेत्रप्रॉप (bwlabel (imgbw),' centroid ',' area '); '? –
जिस व्यक्ति ने कोड का इस्तेमाल किया, उसने कहा कि यह काम करता है और उसने पूछा "मुझे प्लॉट कमांड कहां रखा जाना चाहिए और किस चर का उपयोग किया जाना चाहिए?" – HSN
यह 'आकृति, imagesc (imf_orig) द्वारा किया जाता है; colorbar; '। जाहिर है, 'imf_orig' की गणना के बाद। – Serg