CUDA Programming Applications

کاربردهای برنامه نویسی کودا

CUDA Programming Applications

کاربردهای برنامه نویسی کودا

روشهای کلاسیک لبه یابی

فرآیند تشخیص لبه یکی از مهمترین تکنیکهای کارآمد و مفید در پردازش تصویر به ویژه در جداسازی و شناسایی چارچوب اصلی تصویر می باشد، شیوه های متفاوتی در آشکارسازی لبه در یک تصویر وجود دارد که اغلب با مشکلاتی نظیر از میان رفتن داده های تصویر اصلی و عدم توانایی در لبه یابی در زوایای مختلف مواجه هستند. هدف از تشخیص لبه، مکان یابی مرزهای شی در تصویر است که پایه و اساس تجزیه و تحلیل تصویر و بینایی ماشین محسوب می شود، با توجه به اهمیت تشخیص لبه ها، تاکنون الگوریتم های زیادی جهت استخراج لبه ها پیشنهاد شده است، معمولا هر یک از این روش ها تنها بخشی از لبه ها را آشکار ساخته و به این ترتیب برخی از لبه  های واقعی توسط الگوریتم تشخیص داده نمی شوند. همچنین این امکان نیز وجود دارد که برخی نقاط به اشتباه به عنوان لبه دسته بندی شوند.
تعریف لبه:
نقاطی از تصویر که دارای تغییر شدت روشنایی ناگهانی هستند لبه نام دارند، نقاط لبه معمولا مرزها را شامل می شوند.
روشهای لبه یابی:
1- Sobel:
با کانوالو کردن دو ماتریس Gx و Gy که در زیر آمده است در تصویر اصلی لبه های عمودی و افقی تصویر آشکار می گردد سپس با استفاده از رابطه اندازه تمامی لبه ها نمایان می شود.

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


2-Prewitt:

با کانوالو کردن دو ماتریس GxوGy در تصویر اصلی لبه های عمودی و افقی آشکار شده ،سپس با استفاده از رابطه اندازه که قبلا به ان اشاره نمودیم تمامی لبه ها قابل نمایش است

که نتیجه در شکل زیر قابل نمایش است.
3-Laplacian:
 با کانوالو ماسک زیر در تصویر تمامی لبه های افقی و عمودی نمایان می شود.
که نتیجه در شکل زیر قابل مشاهده است.


4-Roberts:
با کانوالو کردن دو ماتریس GxوGy در تصویر اصلی لبه های عمودی و افقی آشکارمی شوند.

که نتیجه در شکل زیر قابل مشاهده است

تاریخچه opencv

opencv مخفف عبارت open source computer vision یک کتابخانه از توابع برنامه نویسی با هدف بینایی ماشین بلادرنگ توسط شرکت اینتل در سال 1999 برای ردیابی اشعه و نمایش سه بعدی دیوار ابداع و ارئه گردید.سپس توسط آزمایشگاه تحقیقاتی Willow garage  پشتیبانی شد. محیط کدنویسی  opencv پلتفرم ++C می باشد و همچنان جامعیت خود را باتوجه به این که توسط زبان C که قدیمی تر است توسعه داده شده است حفظ نموده است و همچنین چارچوبهای یادگیری عمیق را پشتیبانی می نماید، این کتابخانه علاوه بر پلتفرم ++C در پلتفرمهای پایتون، جاوا، متلب و اکتاو و ... قابل دسترس است. تسریع سخت افزاری این کتابخانه برپایه پردازنده گرافیکی است که توسط پلتفرمهای CUDA که مختص شرکت NVIDIA در سال 2010 ارائه شد و OPENCL که در سال 2012 توسط شرکت Apple توسعه داده شد قابل دسترس است.opencv توسط سیستم عاملهای Windows,Mac,Linux,FreeBSD,NetBSD,openBSD پشتیبانی می شود. در فایلی که توسط آقای باقری اصل ارائه گردیده جزییات بهتری قابل مشاهده می باشد.

لینک دانلود مستقیم از سایت opencv.org که با فیلتر شکن قابل دانلود است.


Moments and Moment Invariants in Pattern Recognition

این کتاب اشاره ای بر مباحث پیش پردازش تصویر جهت امر بینایی ماشین داشته و سپس به بررسی الگوریتمهایی در زمینه بینایی ماشین پرداخته است، و در 9 فصل توسط آقایان Jan Flusser و Tomáš Suk و خانم Barbara Zitová اعضای گروه کامپیوتر دانشگاه www.avcr.cz  جمهوری چک در سال 2009 به چاپ رسید.




   

دستورات cudaThreadSynchronize و cudaDeviceSynchronize

تفاوت بین دستورات cudaThreadSynchronize وcudaDeviceSynchronize در چیست؟
بنظر می رسد بسیاری از برنامه های کاربردی از تابع cudaThreadSynchronize بسیار استفاده نموده انداما اسناد اخیر شرکت NVIDIA در این رابطه بیان نموده است که تابع cudaThreadSynchronize بعلت منعکس نکردن رفتار واقعی خود منسوخ شده است و بعلت تشابه زیاد کارآیی آن با کارآیی تابع cudaDeviceSynchronize از این تابع بجای آن استفاده می شودو وظیفه اصلی آن همگام سازی تردهای داخل GPU بوده و ربطی به CPU ندارد مکان قرار گیری این دستور ،بعد از فراخوانی آخرین کرنل می باشد. مانند شکل زیر


با استفاده از این دستور به استفاده بهینه تری از حافظه و همچنین کاهش مصرف زمان پردازش دست می یابیم،نتیجه 6 آزمونی که برای جمع دوبردار با 8192 عنصر اجرا شد با استفاده از این دستور و همچنین بدون استفاده از آن در جدول زیر آمده است.


شماره آزمونبا استفاده از دستورcudaDeviceSynchronizeبدون استفاده از دستور cudaDeviceSynchronize
1
2479028microsecond
2486615microsecond
2
2503691microsecond
2573641microsecond
3
2576774microsecond
2570786microsecond
4
2470012microsecond
2629837microsecond
5
2571920microsecond
2710080microsecond
6
2495909microsecond
2618598microsecond