detect circle
   تبدیل   هاف (: Hough transform)‏      

    روشی برای استخراج ویژگی‌ها   در آنالیز تصاویر، بینایی رایانه‌ای   و پردازش تصویر دیجیتال   است.  

 این روش در یک تصویر به دنبال نمونه‌هایی از یک الگو می‌گردد.

این   نمونه‌ها ممکن است کامل نباشند و همچنین تا حدی دچار اعوجاج شده باشند.  

 به عنوان نمونه از کاربردهای این روش می‌توان   به تشخیص وجود خط مستقیم در یک تصویر اشاره کرد.     

 ***در این برنامه  تصویر  دایره ها با استفاده از تبدیل هاف پیدا می‌شود  

نحوی اجرای برنامه :

ابتدا تصویر را خوانده در متغیر im  ذخیره می کنیم.

minR, maxR  را هم اندازه هم انتخاب  می کنیم. که این مقایر ماکزیمم و مینیم شعاع دایره ها را مشخص می کند

thresh  نسبت حداقل تعداد لبه شناسایی

***, thresh, delta این مقادیر را اگر در ابتدا برنامه مشخص نکنیم به صورت پیش فرض در برنامه مقداردهی می شوند.

im=imread(‘F:\circle.jpg’);

خواندن تصویر مورد نظر

houghcircles(im,10,10,0.24)

اجرای تابع اصلی پروژه که دایره ها شناسایی می کند.

کد متلب با تابع houghcircles معرفی می شود :

function circles = houghcircles(im, minR, maxR, thresh)
%
% HOUGHCIRCLES detects multiple disks (coins) in an image using Hough
% Transform. The image contains separating, touching, or overlapping
% disks whose centers may be in or out of the image.
%% Syntax

% houghcircles(im, minR, maxR);
% houghcircles(im, minR, maxR, thresh);
% houghcircles(im, minR, maxR, thresh, delta);
% circles = houghcircles(im, minR, maxR);
% circles = houghcircles(im, minR, maxR, thresh);
% circles = houghcircles(im, minR, maxR, thresh, delta);
%% Inputs:
% – im: input image
% – minR: minimal radius in pixels
% – maxR: maximal radius in pixels
% – thresh (optional): the minimal ratio of the number of detected edge
% pixels to 0.9 times the calculated circle perimeter (0maxR || thresh<0 || thresh>1 || delta<0 disp('Input conditions: 02
im = rgb2gray(im);
end
% Create a 3D Hough array with the first two dimensions specifying the
% coordinates of the circle centers, and the third specifying the radii.
% To accomodate the circles whose centers are out of the image, the first
% two dimensions are extended by 2*maxR.

٪ ایجاد یک آرایه هاف 3D با دو بعد مشخص اول
٪ مختصات مرکز دایره، و سوم تعیین شعاع.
٪ به جای دایره هایی که مراکز خارج از تصویر
٪ دو بعد توسط 2 * maxR
maxR2 = 2*maxR;
hough = zeros(size(im,1)+maxR2, size(im,2)+maxR2, maxR-minR+1);

% For an edge pixel (ex ey), the locations of its corresponding, possible
برای پیکسل لبه (ex ey) مکان متناظر با آن، ممکن است استفاده بشود
% circle centers are within the region [ex-maxR:ex+maxR, ey-maxR:ey+maxR].
% Thus the grid [0:maxR2, 0:maxR2] is first created, and then the distances
% between the center and all the grid points are computed to form a radius
درصد بین مرکز و تمام نقاط شبکه به شکل یک شعاع محاسبه می شود
% map (Rmap), followed by clearing out-of-range radii.
[X Y] = meshgrid(0:maxR2, 0:maxR2);
Rmap = round(sqrt((X-maxR).^2 + (Y-maxR).^2));
Rmap(RmapmaxR) = 0;

% Detect edge pixels using Canny edge detector. Adjust the lower and/or
توسط آشکارساز لبه کنی پیکسل های لبه شناسایی می شوند
% upper thresholds to balance between the performance and detection quality.
% For each edge pixel, increment the corresponding elements in the Hough
% array. (Ex Ey) are the coordinates of edge pixels and (Cy Cx R) are the
% centers and radii of the corresponding circles.
edgeim = edge(im, ‘canny’, [0.15 0.2]);
[Ey Ex] = find(edgeim);
[Cy Cx R] = find(Rmap);
for i = 1:length(Ex);
Index = sub2ind(size(hough), Cy+Ey(i)-1, Cx+Ex(i)-1, R-minR+1);
hough(Index) = hough(Index)+1;
end

% Collect candidate circles.
% Due to digitization, the number of detectable edge pixels are about 90%
با توجه به دیجیتالی کردن، تعداد پیکسل لبه قابل تشخیص هستند حدود 90٪
% of the calculated perimeter.

twoPi = 0.9*2*pi;
circles = zeros(0,4); % Format: (x y r t)
for radius = minR:maxR % Loop from minimal to maximal radius
یک حلقه از حداقل و حداکثر شعاع
slice = hough(:,:,radius-minR+1); % Offset by minR
twoPiR = twoPi*radius;
slice(slice

تصویر ورودی
نمایش تصویر خروجی برنامه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *