41
پردازش تصویر باfaradars.org/fvimg9405 شم جلسه ش: و اجزاءوط، کانتورهاراج خط استخ مدرس: نیالهام شعبانی ا هوش مصنوعی دانشجوی دکترایصفهانه انشگا دا ﻓﺮادرسFaraDars.org

آموزش پردازش تصویر با OpenCV - بخش ششم

Embed Size (px)

Citation preview

Page 1: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

: جلسه ششماستخراج خطوط، کانتورها و اجزاء

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

دانشگاه اصفهان

فرادرس

FaraDars.org

Page 2: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

مقدمهصویر،تتشکیل‌دهندهپیکسل‌هایازمجموعه‌ایازتااستضروریمحتوایی،لحاظازتصاویرتحلیلمنظوربه•

یکمحتوایکههستندپایه‌ایالمان‌های...وحباب‌هاخطوط،کانتورها،.نموداستخراجرامعناداریویژگی‌های.شدهدخوادادهآموزششمابهمهمویژگی‌هایاینازبعضیاستخراجچگونگیجلسهایندر.می‌سازندراتصویر

2

فرادرس

FaraDars.org

Page 3: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تشخیص کانتورهای تصویر با استفاده از عملگر کنی

3

فرادرس

FaraDars.org

Page 4: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

عملگر کنی.کنیمشناساییتصویریکدررالبه‌هاچگونهکهگرفتیمیادقبال•به‌هایلازباینریتصویریگرادیان،اندازهرویبرآستانهحدیکاعمالباچگونهکهدادیمنشانخاص،طوربه•

.می‌آیددستبهتصویراصلی.می‌باشندمهمیبصریاطالعاتشاملپسهستند،تصاویرالمان‌هایکنندهترسیملبه‌هاکهآنجاییاز•خیمضمعموالًشدهشناساییلبه‌هایآنکهاول:می‌بردرنجاساسیمشکلدوازلبه‌هاباینریتصویرهرچند•

آستانهحدیافتنمهم‌تر،ودوممشکل.نیستامکان‌پذیراشیامرزهایدقیقمحلتعیینکهمعنااینبههستند،افیکحدبههمزمانودهدتشخیصراشیءمهملبه‌هایتمامیکهباشدپایینکافیحدبهکهاستمناسبی

الگوریتمکهاستمسئله‌ایاین.نشودشاملنهاییباینریتصویردرراشیءمهمغیروناچیزلبه‌هایتاباشدباال.کندحلراآنتااستکردهسعیکنی

4

فرادرس

FaraDars.org

Page 5: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تابع کنی

آنازcv::Cannyتابعطریقازمی‌توانواستشدهپیاده‌سازیOpenCVتوسطمستقیماًکنیالگوریتم•.کردصمشخراآستانهحددوبایدالگوریتماینازاستفادهبرایشد،بیانقبالًکههمان‌گونه.نموداستفاده:استزیرصورتبهتابعاینفراخوانی

5

C++: void Canny(InputArray image, OutputArray edges, double threshold1,

double threshold2, int apertureSize=3, boolL2gradient=false )

فرادرس

FaraDars.org

Page 6: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تابع کنی

.می‌کندعملسوبلعملگرپایهبرعموماًکنیعملگر•عملگرایناصلیایدهمی‌باشد،لبه‌هابهمتعلقکهنقاطیتشخیصبرایپایین،وباالآستانهحددوازاستفاده•

.است.شودشاملراتصویردرموجوداصلیلبه‌هایکهشودانتخابصورتیبهبایدپایینآستانهحد•تمامییستیباآستانهحداین.هستندمهمکانتورهایبهمتعلقکهاستلبه‌هاییشناساییدومآستانهحدنقش•

.نمایدحذفنهایینتیجهازرامی‌شوندمحسوبغیرضروریکهلبه‌هاییحدازلحاصلبه‌هایازالگوریتماین.می‌نمایدتولیدلبه‌هاازبهینهتصویرینتیجه،2اینترکیبباکنیالگوریتم•

ه‌هایلبباراآن‌هاونمایندایجادرالبهازمتصلمسیریککهمی‌داردنگهرانقاطیآنتنهاپایینآستانه.می‌نمایدمتصلباال،آستانهحداعمالازحاصلشدهدادهتشخیص

6

فرادرس

FaraDars.org

Page 7: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

مثال

.کنیممیامتحانتصویریکرویبرراکنیعملگر•

7

فرادرس

FaraDars.org

Page 8: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تشخیص خطوط در تصاویر با استفاده از تبدیل هاف

8

فرادرس

FaraDars.org

Page 9: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تبدیل هاف

پارامتریمعادلهیکصورتبهراآن‌هابتوانکههندسییاشکالتمامیتشخیصبرایهافالگوریتمحقیقتدر•.استمناسبیکاندیدای،نمودبیان

9

خطدایره

...

فرادرس

FaraDars.org

Page 10: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

هافبا تبدیل تشخیص خطوط

:گیریممینظردرزیرفرمبهپارامتریمعادلهیکصورتبهراخطهاف،تبدیلازاستفادهبرای•𝑝 = 𝑥𝑐𝑜𝑠𝜃 + 𝑦𝑠𝑖𝑛𝜃

وخطایننبیزاویهبیان‌کنندهθو(چپسمتباالیگوشه)تصویرمرکزوخطبینفاصلهبیان‌کنندهpپارامتر•πتا0بازهدررادیانθزاویهدارایتصویردرموجودخطوطبیان،نحوهایناساسبر.می‌باشدافقخط

.باشدتصویرقطربابرابرمقداریحداکثردارایمی‌تواندpکهحالیدر.می‌باشند

10

𝑝

فرادرس

FaraDars.org

Page 11: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تشخیص خطوط با تبدیل هاف

باینریویرتصدرموجودنقاطازکافیتعدادبهکهاستباینریتصویرازخطوطیتمامیافتنهاف،تبدیلهدف•کندبورعآن‌هاازمی‌توانندکهراخطوطیتمامیتصویر،درموجودنقاطتمامیازایبهالگوریتماین.کنندعبوراندازهبهخطاینکهاستمعنااینبهکند،عبورنقاطاززیادیتعدادازخطیککهزمانیو.می‌کندمشخصرا

.شودگرفتهنظردرتصویردرموجودخطیکعنوانبهکهاستمهمکافیاست،دهششناساییتصویردرخطیککهدفعاتیتعدادشمارشبرایدوبعدیکنندهانباریکازهافتبدیل•

,p)پارامترهایبرایشدهمشخصجستجویبازه‌هایاندازهاساسبرانبارهایناندازه.می‌نمایداستفاده θ)،.می‌شودتعریف

قابلمقداردارایکهراانبارهایندرمحلیبیشینهمقادیرتصویر،خطوطشناساییبرایاستالزمتنهانهایتدر•.کنیمشناساییراهستندتوجهی

11

فرادرس

FaraDars.org

Page 12: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

هاف استانداردتشخیص خطوط با تبدیل

•OpenCVاستکردهارائههافتبدیلازاستفادهباخطتشخیصبرایپیاده‌سازینوعدو..استتبدیلاینبرایپایه‌ایحالتcv::HoughLinesتابع•

برآن‌هازابرخیکه(هستندصفرغیرمقادیریدارایکه)نقاطیمجموعهشاملباینریاستتصویریتابعاینورودی•کنیملگرعازحاصلنتیجهمی‌تواندمثالبرایکهمی‌باشدلبه‌هاتصویرتصویر،اینمعموالً.شده‌اندترازخطیکروی.باشد

استاعشاریاعدادازتایی2مجموعهشاملالمانهرکهمی‌باشدcv::Vec2fالمان‌هایازبرداریتابعاینخروجی•,p)پارامترهایمعرفکه θ)استشدهدادهتشخیصخطوط.

•rho, thetaکنندمیتعیینانبارهدررازاویهوفاصلهرزولوشن..آورددستبهبایدشدنپذیرفتهبرایخطیککهاسترأییمقدارحداقلcv::HoughLinesتابعآخرپارامتر•

12

C++: void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold)فرادرس

FaraDars.org

Page 13: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

هاف احتماالتیتشخیص خطوط با تبدیل

اصحیحینتشخیص‌هایباعثمی‌تواندنتیجهدرکهمی‌گردد،خطیکدرشدهترازلبه‌هایدنبالبههافتبدیل•سطتوهم‌جوارترازچندینایجاددلیلبهاینکهیاو.شودپیکسل‌هابرخیتصادفیشدنترازهمدلیلبه

.شوددادهتشخیصهمکناردرهم‌جوارخطچندینپیکسل‌ها،نسخه،(انتهانقاطباخطوطی)تصویردرپاره‌خط‌هاتشخیصامکانهمچنینومشکالتاینازبرخیرفعبرای•

تابعتوسطOpenCVدروداردنامهافاحتمالیتبدیلتبدیل،این.استشدهارائهتبدیلاینازدیگریcv::HoughLinesPاستشدهارائه.

انتهایینقطهدومشخص‌کنندهآنالمانهرکهمی‌گرداندبرcv::Vec4iجنسازمقادیریبابرداریتابع،این•.هستنیزداده‌شدهتشخیصخطپارهیک

13

C++: void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta,

int threshold, double minLineLength=0, double maxLineGap=0 )

فرادرس

FaraDars.org

Page 14: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

تشخیص خطوط با تبدیل هاف احتماالتی

.استشدهاعمالپایهالگوریتمرویبرجزئیتغییرچندهافاحتمالیتبدیلدر•کهمانیزدوماً،.می‌شوندانتخابتصادفیصورتبهنقاطباینری،تصویرسطربهسطرجستجویجایبهاوالً،•

پیمایشطخاینراستایدرتصویرتمامییابد،دستقبولقابلمقداربهانبارکنندهماتریسدرایه‌هایازیکیهنشدبررسیاگرحتی)می‌شوندحذفبررسیروندازدارند،قرارخطاینرویبرکهنقاطیتمامیوشده.شودمشخصشده،شناساییخطانتهایوابتداتامی‌شودباعثهمچنینپویشاین.(باشند

ولقبقابلطولحداقلکردنمشخصبرایپارامتریکدارد؛دیگرپارامتر2تعریفبهنیازالگوریتممنظوراینبه•.خطیکنقاطبینقبولقابلفاصلهحداکثردیگریوخطپارهیکبرای

تعداداهشکخاطربهپیچیدگیاینازبخشیامامی‌شود،الگوریتمروندشدنپیچیده‌ترباعثاضافیمراحلاین•.می‌شودجبرانمی‌شوند،پردازشکهنقاطی

14

فرادرس

FaraDars.org

Page 15: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

با تبدیل هاف دوایر تشخیص

.می‌باشدزیرصورتبهدایرهپارامتریمعادله•𝑟2 = 𝑥 − 𝑥0

2 + 𝑦 − 𝑦02

.باشددبعسهدارایبایدانبارکنندهمعناستاینبهکه(دایرهمرکزمختصاتوشعاع)داردپارامتر3معادلهاین•.استشدهپیاده‌سازیباالاستراتژیاساسبرcv::HoughCirclesتابع•

15

C++: void HoughCircles(InputArray image, OutputArray circles, int method, double dp,

double minDist, double param1=100, double param2=100, int minRadius=0, int maxRadius=0 )

فرادرس

FaraDars.org

Page 16: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

با تبدیل هاف دوایر تشخیص

16

C++: void HoughCircles(InputArray image, OutputArray circles, int method, double dp,

double minDist, double param1=100, double param2=100, int minRadius=0, int maxRadius=0 )

•src_gray: Input image (grayscale)

•circles: A vector that stores sets of 3 values: for each detected circle.

•CV_HOUGH_GRADIENT: Define the detection method. Currently this is the only one available in OpenCV

•dp = 1: The inverse ratio of resolution

•min_dist = src_gray.rows/8: Minimum distance between detected centers

•param_1 = 200: Upper threshold for the internal Canny edge detector

•param_2 = 100*: Threshold for center detection.

•min_radius = 0: Minimum radio to be detected. If unknown, put zero as default.

•max_radius = 0: Maximum radius to be detected. If unknown, put zero as default

فرادرس

FaraDars.org

Page 17: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

مثال

.کنیداستخراجرادوایروزیرخطوطویراتصدر•

17

فرادرس

FaraDars.org

Page 18: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

به مجموعه ای از نقاطبرازش

18

فرادرس

FaraDars.org

Page 19: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

برازش خط

بردار)خطمعادلهپارامترهایبهمتعلقاولمقداردوآندرکهمی‌گرداندبرراcv::Vec4fمقداریکتابعاین•تابعاینآخرپارامتر2.می‌باشدخطاینازاینقطهمختصاتبعدیمقداردووبودهآمدهدستبه(خطجهتدرره‌شدهذخینقاطکهداشتتوجهنکتهاینبهباید.می‌باشدآمدهدستبهخطدقتمیزانکردنمشخصبرای

std::vectorیکفرمبهبایستیتابعایندراستفادهبرایcv::Matشوندتبدیل.زمینهنایدرخوبمثالیککالیبراسیون)شودمیاستفادهخصوصیاتبرخیمحاسبهبرایخطمعادلهازعموماً•

.(است

19

C++: void fitLine(InputArray points, OutputArray line, int distType, double param, double reps,

double aeps) فرادرس

FaraDars.org

Page 20: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

برازش خط

باکهاست،یاقلیدسفاصلهمحاسبهآن‌هاسریع‌ترینکهاستشدهارائهفاصلهمحاسبهبرایمتفاوتتابعچندین•CV_DIST_L2اصلهفمربعاتمجموعکمترینیافتنباخطوطانطباقپرچم،اینازاستفادهبا.می‌شودمشخص

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

روشازصلهفامقدارکمینهیافتنبرای.کرداستفادهدارند،کمتریتأثیردورترنقاطآن‌هادرکهدیگریفاصلهM-estimatorکه)اردوزنمربعاتمجموعمقدارکمینهیافتنمسئلهتکراریروندیدرآندرکهمی‌شوداستفاده

.می‌گیردقرارحلمورد(هستندخطازنقاطفاصلهمعکوسبامتناسبوزن‌هاآندرازه‌ایمجموعورودی،حالتایندر.کرداستفادهنیزبعدیسهخطوطیافتنبرایتابعاینازمی‌توانهمچنین•

cv::Point3iیاوcv::Point3fیکقالبدرخروجیوبودهcv::Vec6fمی‌شودارائه.

20

C++: void fitLine(InputArray points, OutputArray line, int distType, double param, double reps,

double aeps) فرادرس

FaraDars.org

Page 21: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

برازش بیضی

cv::fitEllipseتابعازمی‌توانمی‌شود،منطبقبعدیدونقاطازایمجموعهرویبهکهبیضییکیافتنبرای•درنظرموردبیضیکه(cv::RotatedRect)استیافتهچرخشمستطیلیتابعاینخروجی.کرداستفاده.می‌شودمحاطآنداخل

:مثال•

.نماییداستفادهآمدهدستبهبیضیرسمبرایمی‌توانیدcv::ellipseتابعاز•

21

C++: RotatedRect fitEllipse(InputArray points) فرادرس

FaraDars.org

Page 22: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور اجزاء

22

فرادرس

FaraDars.org

Page 23: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

کانتور چیست؟

پیراموناطنقتواندمیمنحنیینا.دندهمینمایشتصویردرمنحنییککهاستنقاطازلیستیکانتوریک•.باشدشیئیک

.باشندمفیدتوانندمیاشکالشناساییوشکلتحلیلدرکانتورها•

-قسمتکهایلبههایپیکسلکردنپیدابرایتواندمیcannyلبهدهندهتشخیصمثلهاییالگوریتماگرچه•یتموجوددرموردچیزیهاالگوریتمایناماگیرند،قراراستفادهموردکنند،میجداهمازراتصویرمختلفهای

.استکانتورهاشکلبهلبههایپیکسلاینکردنسرهمبعدیمرحله.گویندنمیهالبهخودبخودیآنوداردوجودکاراینانجامبرایOpenCVدرآسانتابعیکرود،میانتظارکههمانطور•

cvFindContours()است.

23

فرادرس

FaraDars.org

Page 24: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

درخت کانتور

24

فرادرس

FaraDars.org

Page 25: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور •OpenCVشامل‌تابعی‌به‌نام‌cv::findContoursاست‌که‌به‌سادگی‌می‌تواند‌کانتور‌اجرای‌متصل‌را‌در‌تصویر‌

.استخراج‌نماید

های‌لبه‌را‌داراست‌یا‌باشد،‌که‌پیکسل()cvCannyتواند‌تصویری‌حاصل‌از‌میاست‌کهورودی‌یک‌تصویر‌باینری‌•که‌در‌آن‌لبه‌ها‌صراحتا‌به‌عنوان‌مرز‌نواحی‌مثبت‌ومنفی‌باشد‌ ()cvThresholdتصویر‌حاصل‌از‌توابعی‌مثل‌

.‌مشخص‌هستند.‌‌نمایش‌داده‌می‌شودcv::Pointو‌خروجی‌آن‌برداری‌شامل‌کانتورهاست‌که‌هر‌کانتور‌با‌برداری‌از‌نوع‌••Hierarchyیک‌بردار‌خروجی‌اختیاری‌است‌که‌اطالعاتی‌در‌مورد‌توپولوژی‌تصویر‌شامل‌می‌شود.

و‌اولین‌پرچم‌مشخص‌کننده‌آن‌است‌که‌کانتورهای‌اشیاء‌تا‌چه‌سطح.‌عالوه‌بر‌اینها‌دو‌پرچم‌باید‌مشخص‌شود•.‌‌چگونه‌در‌درخت‌استخراج‌شود

25

C++: void findContours(InputOutputArray image, OutputArrayOfArrays contours,

OutputArray hierarchy, int mode, int method, Point offset=Point()) فرادرس

FaraDars.org

Page 26: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

26

C++: void findContours(InputOutputArray image, OutputArrayOfArrays contours,

OutputArray hierarchy, int mode, int method, Point offset=Point())

,CV_RETR_EXTERNAL:‌های‌چهارگانه‌زیر‌تنظیم‌شودتواند‌به‌هر‌یک‌از‌گزینهمی modeمتغیر‌•

CV_RETR_LIST, CV_RETR_CCOMP, یا‌‌CV_RETR_TREE.

م‌خواهیخواهیم‌چه‌کانتورهایی‌پیدا‌کنیم‌و‌چگونه‌میدهد‌که‌دقیقا‌میبه‌تابع‌نشان‌میmodeمقدار‌• ,h_prev, h_next)به‌خصوص،‌روشی‌که‌با‌آن‌متغیرهای‌گره‌درخت‌.‌نتیجه‌برای‌ما‌نمایش‌داده‌شود

v_prev, and v_next) شوند،‌توسط‌مقدار‌برای‌اتصال‌کانتورهای‌پیدا‌شده‌استفاده‌میmodeتعیین‌.‌شودمی

فرادرس

FaraDars.org

Page 27: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

27

C++: void findContours(InputOutputArray image, OutputArrayOfArrays contours,

OutputArray hierarchy, int mode, int method, Point offset=Point())

•CV_RETR_EXTERNALکندمیبازیابیراکانتورترینخارجیتنها.•CV_RETR_LISTدهدمیقرارلیستدرراهاآنوکردهبازیابیراکانتورهاهمه.•CV_RETR_CCOMPیساماندهسطحیدومراتبسلسلهیکدرراهاآنوکردهبازیابیراکانتورهاهمه

هاحفرهمرزهایدومسطحمرزهایواجزاخارجیمرزهایسطح،باالترینمرزهایکهطوریبه.کندمی.هستند

•CV_RETR_TREEدر.دسازمیراتودرتوکانتورهایکاملمراتبسلسلهوکردهبازیابیراکانتورهاهمهکهاست،یمراتبسلسلهساختارایندرآنوضعیتکنندهمشخصکهاستالمانیشاملکانتورهرحالتاینسطحهماندرقبلیوبعدیکانتورشمارهکنندهمشخصاولعدد2.استشدهتشکیلصحیحعددچهاراز

نبیامنفیعددوجود.می‌باشدکانتورآنوالدوفرزنداولینشمارهکنندهمشخصبعدیعدد2واست.می‌باشدجهتآندرکانتورهالیستپایانکننده

فرادرس

FaraDars.org

Page 28: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

28

فرادرس

FaraDars.org

Page 29: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

.می‌شونداستخراجسادهالگوریتمیکاساسبرکانتورها•.برسدجزءیکبهکهزمانیتامی‌کندپویشراتصویرالگوریتماین•آنمرزیپیکسل‌هایبهکهزمانیتاکردهجزءآنکانتورگسترشبهشروعجزء،نقطهاینازالگوریتمسپس•

.برسدجزءادامهدیدججزءیافتنبرایراخودپویشبازمانده،نقطهآخرینازالگوریتمجزء،آنبرایکانتورتکمیلازپس•

.می‌دهد

29

فرادرس

FaraDars.org

Page 30: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

30

C++: void findContours(InputOutputArray image, OutputArrayOfArrays contours,

OutputArray hierarchy, int mode, int method, Point offset=Point())

(‌.‌یعنی‌چگونگی‌تخمین‌کانتورها)تعلق‌دارد methodبه‌پارامتر‌پنج‌مقدار‌بعدی‌••CV_CHAIN_CODEهمه‌متدهای‌دیگر‌خروجی‌چند‌.‌خروجی‌به‌فرم‌کد‌زنجیری‌فریمنکانتورهای‌

(.ای‌از‌رئوسدنباله)ضلعی‌دارند‌•CV_CHAIN_APPROX_NONEکندنقاط‌را‌از‌کد‌زنجیری‌به‌نقاط‌ترجمه‌میهمه‌.••CV_CHAIN_APPROX_SIMPLEافقی،‌عمودی‌و‌قطری‌را‌فشرده‌کرده‌و‌تنها‌نقاط‌نهایی‌قطعات‌

.مانندمیها‌باقی‌آن•CV_CHAIN_APPROX_TC89_L1یا‌‌CV_CHAIN_APPROX_TC89_KCOSاز‌یکی‌

.بردرا‌به‌کار‌میTeh-Chinهای‌الگوریتم‌تخمین‌زنجیر‌ویژگی•CV_LINK_RUNSها‌1های‌افقیکه‌قسمت(‌ها‌که‌درباال‌لیست‌شدهبا‌آن)کامال‌متفاوت‌الگوریتم‌

.استCV_RETR_LISTکند،‌تنها‌حالت‌بازیابی‌این‌روش‌را‌پیوند‌می

فرادرس

FaraDars.org

Page 31: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

فریمنایزنجیرهکد•

31

فرادرس

FaraDars.org

Page 32: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

استخراج کانتور

32

C++: void findContours(InputOutputArray image, OutputArrayOfArrays contours,

OutputArray hierarchy, int mode, int method, Point offset=Point())

.‌‌ذخیره‌می‌شودhierrachyو‌contoursبنابراین‌خروجی‌تابع‌در‌••Contoursودکانتورهای‌تشخیص‌داده‌شده‌هستند‌که‌هر‌کانتور‌به‌شکل‌برداری‌از‌نقاط‌ذخیره‌می‌ش.•Hierarchyمثال‌فرض‌کنید‌برای‌کانتور‌.‌مقدار‌را‌ذخیره‌می‌کند4برای‌هر‌کانتور‌iام‌

hierarchy[i][0]کانتور‌بعدی‌در‌سطح‌افقhierarchy[i][1]افقدر‌سطح‌قبلی‌کانتور‌hierarchy[i][2]عمودیکانتور‌بعدی‌در‌سطح‌hierarchy[i][3]عمودیدر‌سطح‌قبلی‌کانتور‌

فرادرس

FaraDars.org

Page 33: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

کانتور رسم

.کندرسمتصاویررویبرراکانتورهااینمی‌تواندکهداردوجودتابعیOpenCVدرخوشبختانه•

ابمی‌توانهمچنین.شدخواهدرسمکانتورهاتمامیشود،دادهتابعاینسومپارامتربهمنفیمقداریاگر•.نمودرسمراخاصکانتورآنتنهاکانتور،یکشمارهنمودنمشخص

.شودمیپرکانتورهاداخلباشد،thickness=CV_FILLEDیامنفیمقداریکبرابرthicknessکهصورتیدر•

.شودمیاستفادهمشخصسطحتاخاصکانتورهایترسیمبرایmaxLevelوhierarchyپارامتراز•

33

void drawContours(InputOutputArray image, InputArrayOfArrays contours, int contourIdx,

const Scalar& color, int thickness=1, int lineType=8, InputArray hierarchy=noArray(),

int maxLevel=INT_MAX, Point offset=Point() )

فرادرس

FaraDars.org

Page 34: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

مثالافکنشپساززیرباینریتصویرکنیدفرض•

چپسمتتصویررویبردستپوستهیستوگرامرادستکانتورباینریتصویرایندرباشد،آمدهبدست.کنیممیپیدا

34

راماشینیکپالکباینریتصویرکنیدفرض•راپالکارقامکانتور.آوریمبدستزیرروشبه

فرادرس.آوریدبدست

FaraDars.org

Page 35: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

گرهای شکلیتوصیف

35

فرادرس

FaraDars.org

Page 36: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

توصیف گرهای شکل

.نموداستفادهشکلیکتوصیفبرایتوانمیکانتورهااز•.گیرندقراراستفادهردوماشکالبازشناسیبرایتوانندمیگرهاتوصیف•.هستندتصویردرشیءیکمعرفهم،بهمتصلاجزایمعمولصورتبه•آن‌هارویبرمحاسباتیکسریانجاممعموالًتصویر،المان‌هایدیگرباآن‌هامقایسهیاواشیااینتشخیصبرای•

.می‌باشدمفیدآن‌ها،خصوصیاتازبرخیآوردندستبهمنظوربه

36

فرادرس

FaraDars.org

Page 37: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

توصیف گرهای شکل

:همچونشکلگرهایتوصیف•Bounding)کنندهمحاطجعبه– box)کانتوریک

کانتوریککنندهمحاطدایرهکوچک‌ترین–

37

فرادرس

FaraDars.org

Page 38: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

توصیف گرهای شکل

:همچونشکلگرهایتوصیف•Polygonalکانتورچندضلعیتقریب– approximation

محدبپوستهیاقشر–

38

فرادرس

FaraDars.org

Page 39: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

توصیف گرهای شکل

:همچونشکلگرهایتوصیف•کانتوریکهایممان–

جرممرکز

39

C++: Moments moments(InputArray array, bool binaryImage=false فرادرس(

FaraDars.org

Page 40: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

مثال

40

تلفمخهایکنندهتوصیفزیرپالکتصویردر• فرادرس.کنیدرسمراآمدهبدستکانتورهایرویبر

FaraDars.org

Page 41: آموزش پردازش تصویر با OpenCV - بخش ششم

باتصویر پردازش

faradars.org/fvimg9405

41

فرادرس این اسالید ها بر مبنای نکات مطرح شده در « آموزش پردازش تصویر با »

.تهیه شده است

.نماییدلینک زیر مراجعه برای کسب اطالعات بیشتر در مورد این آموزش به

faradars.org/fvimg9405

باتصویر پردازش

faradars.org/fvimg9405

فرادرس

FaraDars.org