# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > پردازش تصویر (Image Processing) >  شناسائی اشکال هندسی در تصاویر باینری به کمک شبکه عصبی

## mohi_rad2009

باعرض سلام و خسته نباشید 

من به یه برنامه در مطلب نیاز دارم که بتونه تصاویر ساده هندسی مثل مربع مستطیل دایره بیضی ومثلث رو در تصاویر باینری شناسائی کنه.اگه راهنمائی بفرمائید که چطور میشه با استفاده از پردازش تصویر و شبکه عصبی می تونم این برنامه رو بنویسم بسیار ازتون ممنون می شم.البته اگه لینکی سراغ دارید که بتونم این برنامه رو از اونجا بگیرم ممنون میشم اگه معرفی کنید.

همینطور من به یه دیتابیس به صورت تصاویر باینری از این اشکال هندسی نیاز دارم.که در ابعاد 400*300پیکسل باشه.
اگه امکان داره راهنمائی بفرمائید که از کجا میشه این دیتابیس رو دانلود کرد.
ضمناً من می خوام تصویر یک بیضی رو تو مطلب به کمک دستور STRELایجاد کنم اما وقتی کد زیر 

رو اجرا می کنم فقط یک صفحه سفید به من میده. لطفا راهنمائی بفرمائید.

a=zeros(300,400);
a(150,200)=1;
b=strel('ball',5,5,0);
c=imdilate(a,b);
imshow(c)

با تشکر

----------


## مصطفی ساتکی

تو MATLAB تسلط ندارم. ولي روال كار بهتون ميگم خودتون بريد دنبالش .به اميد خدا تالار هوش مصنوعي مستقل راه بيفته كد MATLAB هم ميزارم.
لزومي نداره تصوير باينري باشه اگر grayscale هم باشه با يه دستور به تصوير Binary يا BW تبديلش مي كنيم. اين اشكال اگر هندسي باشه نيازي به شبكه عصبي هم نداريد خودتون با اون درگير نكنيد . راحت با  hough transform اينكار قابل پياده سازي.
به بانك تصوير نيازي نداريد يه برنامه جانبي بنويسيد اين اشكال رو به صورت تصادفي در صفحه رسم كنه و يه نويز هم روي تصوير اعمال كنيد مثلاً Salt & peper حال يه بانك تصويري هندسي داريد كه ديناميكه.
hough transform به دو صورت رايجه.يكي line و ديگري circle .
مربع و مستطيل كه از خط تشكيل شدن Hough خطي مختصات خط ها رو به شما ميده و سپس وظيفه شناسايي با خودتون مثل صحت اينكه 4 پاره خط مستطيل يا مربعه يا 3 پاره خط مربوط به مثلث و Hough دايره هم محل بيضي ها رو براتون تعريف مي كنه.
البته شما تعريف hough رو بلد باشيد مي تونيد هر تابع دلخواه رو مي تونيد باهاش پياده كنيد كه نياز به فاز 2 رو هم نداره.
اگر كارتون راه نيافتد دوباره ادامه بديد تا در مورد شبكه عصبيش هم بحث كنيم

----------


## mohi_rad2009

با سلام و تشکر از پاسخ شما.باید عرض کنم که من واسه اینکار لازمه که از شبکه عصبی استفاده کنم چون تصاویر ممکنه ایده آل نباشند مثلا دایره یا مربع یا مستطیل با تعریف هندسی که از اونها می دونیم نباشند مثلا حاشیه اونها از فرم ایده ال خارج شده باشند یا اینکه تصاویر نویزی باشند.من خودم با استفاده از دستورات پردازش تصویر یه کد نوشتم که 
خیلی از اشکال رو (بجز مربعهای دوران یافته)رو شناسائی می کنه ولی باید اینکارو با شبکه 
عصبی انجام بدم.میشه از شبکه MLPاستفاده کنم ولی بنظر میاد خوب جواب نمیده فکر کنم
بهترین راه هاپفیلد باشه.اگه کدی دارید که با استفاده از شبکه هاپفیلد بتونه اشکال رو شناسائی کنه و در اختیارم قرار بدید ممنون میشم.

----------


## مصطفی ساتکی

يه توضيحي در مورد hough به شما مي دم بعد ميرم سراغ شبكه.
شما فيلتر لبه ياب تون canny باشه خودش به صورت داخلي از Gaussian blur استفاده مي كنه شما مقدار سيگما رو بالاتر بديد گوشه هاي لبه كاملاً نرم ميشه و ديگه مشكلي نداريد.در ضمن شما حتماً نيايد براي مقايسه به صورت استاتيك رفتار كنيد با Fuzzy logic مي تونيد كاملاً اين قضيه رو رفعش كنيد.



> خیلی از اشکال رو (بجز مربعهای دوران یافته)رو شناسائی می کنه ولی باید  اینکارو با شبکه


اگر كار تجاري نباشه و كيفيت كار مهم نباشه با چند خط ساده هم ميشه جواب گرفت ولي جواب براي 98% بالاتر در همه شرايط مد نظره. مثلاً از روي فراواني رنگ ها همون كار hough ولي با يه accumulator ساده. اگر پشت زمينه هاي شلوغ داشته باشين و طيف تصاوير از نظر روشنايي وحشتناك باشه كه با  equalize  كردن هستوگرام هم نشه كار كرد اون زمان canny هم به درد شما نمي خوره و به لبه ياب عصبي يا CNN احتياج داريد كه مطلب هم همچين چيزي رو نداره.

حالا اگر مايليد با شبكه انجام بديد حرفي نيست.انتخابي كه پياده سازي راحته همون mlp .ولي مشكل اصليش اينه اشكال هندسي ممكن دوران داشته باشند وبراي اين حالت شما مشكل داريد و بايستي همه موراد رو بهش train كنيد خودتون ميدونيد mlp شكم درده .بايستي با topology شبكه رو طوري در نظر بگيريد البته با سعي و خطا تا شبكه همگرا شه.متد back propagation رو با روش نيوتن انتخاب كنيد به نظرم تو اين زمينه زودتر به جواب مي رسيد.

حالا اگر بخايد كار دست حسابي انجام بديد قاونيش اينكه از HONN)Higher order neural network) استفاده كنيد .اين روش به Scale و Rotation هم حساس نيست .تا n مرتبه هم ميشه استفاده كرد ولي براي كار شما مرتبه 3 كافي و مزيت ديگر اين مرتبه سومش اينه كه از بهترين متد Backpropagation براي اينكار هم زودتر train ميشه و براي Train هم لازم نيست تصوير orginal رو rotate كنيد.
كارو ميشه هم لبه ميشه انجام داد و هم با blob . اگر database شما از تصوير real باشه با Multiresulation اونو Down sample كنيد يه j ثابت در نظر بگيرد همه رو به اون ابعاد برسوند چه test چه train و چه validation رو.بعد اون pca رو اعمال كنيد threshold رو بالا در نظر بگيريد چون اين چهره نيست كه جزئيات ماتريس كواريانس براتون مهم باشه.
البته راههاي ديگري هم وجود داره كه خواستيد ادامه همين تاپيك مطرح كنيد بهتون ميگم.




> بهترین راه هاپفیلد باشه


اينو هر كس گفته علتش رو هم ازش ميپرسيد.هاپفليد تو اين زمينه نسبت به mlp قابل مقايسه نيست تا چه برسه به HONN .
به هر حال گفتني ها رو من گفتم انتخاب با خودتون.

----------


## mohi_rad2009

ممنون از توضیحاتتون.راستش من از دو پاراگراف آخر چیز زیادی دستگیرم نشد.اصلا باHONN آشنائی ندارم اگه بیشتر توضیح بدید ممنون میشم.اگه سورس کدی تو این زمینه دارید که بتونه کمکم کنه لطفا در اختیارم قرار بدید.هاپفیلد رو به این دلیل پیشنهاد دادند که بدلیل وجود فیدبک درش اولا نسبت به نویز مقاومه و اینکه اگه شکل تا حدودی از فرم اصلیش خارج شده باشه میتونه اصلاح کنه.

----------

