PDA

View Full Version : با چه روشی می توان تصاویری مانند شکل را خواند



sara_aryanfar
یک شنبه 19 خرداد 1392, 23:00 عصر
با سلام دوستان چه روشی رو پیشنهاد می کنید برای خوندن اعداد از تصویر زیر البته نمی خوام از کد های آماده استفاده کنم و می خوام اگر شد با شبکه عصبی بخونم
105334

مصطفی ساتکی
دوشنبه 20 خرداد 1392, 11:21 صبح
حداقل یک چند تا نمونه قرار می دادید تا راهکاری که گفته میشد جامع باشه.
به هر حال اگر تصاویر همین هستش رنگی را که دارای بیشترین فرکانس باشه به عنوان پشت زمینه در نظر بگیرید بعدش یک opening انجام بدید کلیه اون خط ها حذف میشه از این بعد هم اگر چسبیدگی اعداد به هم زیاد باشه و چرخش داشته باشید یعنی هم بایستی چرخش را تشخیص بدید که غیر ممکن هستش در عوض روش تشخیص بایستی rotation-invariant باشه دوم اینکه این نوشته کتابی نیستند که فاصله و نیم فاصله بینشون وجود داشته باشه پس از روش های رایج هم نمی توان برای سگمنت کردن استفاده کرد بایستی روشی انتخاب بشه که نسبت به چسبیدن blob ها حساس نباشه که قاعدتاً بایستی براساس کانتور (لبه) باشه.

mortezamsp
پنج شنبه 23 خرداد 1392, 03:36 صبح
از روش chain code استفاده کنین برای تشخیص اعداد بهتره.
فکرکنم اگه اول تصویرو باینری کنین، بعد چاله ها یا بریدگی ها رو پر کنین (عملیات باینری و مورفولوژی) و کامپوننت های نازک و کوچک رو حذف کنین، اونوقت آمادست تا اعداد رو بصورت کامپوننت واحد استخراج کنید، اسکلت هر عدد رو استخراج کنید و chain code اونو محاسبه کنین، و بکمک یک کلاسیفایر chain code را دسته بندی کنین و تشخیص بدین.

manafzade
پنج شنبه 23 خرداد 1392, 14:48 عصر
از تبدیلاتی مثل تبدیل فوریه و تبدیل زرنیک می تونین استفاده کنین که مستقل از چرخش و مقیاس هست و یا انواع گشتاورها که موجودند.
اما اگه تنوع اعدادتون و شکلهاشون زیاده یعنی با فونتهای مختلفه فکر کنم با این روشها جواب مناسب نگیرین و همون بهتره از شبکه های عصبی استفاده کنین.
و یه فاز train و test داشته باشین.

مصطفی ساتکی
پنج شنبه 23 خرداد 1392, 17:35 عصر
از تبدیلاتی مثل تبدیل فوریه و تبدیل زرنیک می تونین استفاده کنین که مستقل از چرخش و مقیاس هست و یا انواع گشتاورها که موجودند.

این تبدیلات rotation-invariant هستند ولی مشکل اینجاست که ممکن هر کدام از Blob به blob همسایه بچسبه و شما اینجا معیاری برای XHeight و baseline ندارید و همچنین یک خط نوشته نیست که بتونیم زاویه آن را تشخیص بدیم خود روش بایستی rotation-invariant باشه .



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

باز هم مشکل چرخش را باشبکه داره یعنی برای train عملاً جواب نمیده.

manafzade
پنج شنبه 23 خرداد 1392, 19:10 عصر
این تبدیلات rotation-invariant هستند ولی مشکل اینجاست که ممکن هر کدام از Blob به blob همسایه بچسبه و شما اینجا معیاری برای XHeight و baseline ندارید و همچنین یک خط نوشته نیست که بتونیم زاویه آن را تشخیص بدیم خود روش بایستی rotation-invariant باشه .


باز هم مشکل چرخش را باشبکه داره یعنی برای train عملاً جواب نمیده.

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

مصطفی ساتکی
پنج شنبه 23 خرداد 1392, 21:04 عصر
روش تبدیل فوریه و زرنیک خودشون مستقل از چرخش هستند و نیازی نیست ما ابتدا شکلمونو بچرخونیم و همه رو نرمالیزه کنیم. خودشون ضرایبی را به دست میاورند که برای شکلهای یکسان با زوایای مختلف اعدادشون تقریبا یکسان هست.

شما وقتی که 2 تا Blob بهم بچسبه چطور می تونید با fourier descriptor یا zernik ضرایب بدست بیارید شما بایستی ابتدا این blob ها را از هم جدا کنید که با این روش نشدنی اگر میگید میشه روش خودتونو توضیح بدید.
من از هر 2 روش در ocr خودم استفاده کردم ولی روی نوشته های تایپی بنتونستم جواب خوبی بگیرم.



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

برای شبکه عصبی نمی دونم چه featureی انتخاب کردید.
زمانیکه از خود intensity بعنوان feature استفاده کنید و وقتی نمونه ها تون نویزی باشه و با چرخش شبکه را آموزش بدید واریانس بین کلاس هاتون بالا می ره یا حتی با هم همپوشانی پیدا می کنه که منجر به بالا رفتن frr و far میشه که این یعنی خطای بالا .
برای اینکه بیشتر خروجی این کارو لمس کنید یک بار نوشته های تایپی را با نویز train کنید و بدون چرخش میزان far و frr را مشاهده کنید و مجدداً نمونه ها را چرخش بدید و دوباره frr و far را محاسبه کنید اختلاف را ببینید.

من بیشتر روش ها را تست کردم بهترین روش ها تا به حال جواب گرفتم روش های که مبتی بر کانتور هستش بوده و در نهایت به صورت تلفیقی با شبکه های سلولی هم جواب ها را چندین درصد بهبود دادم.

manafzade
جمعه 24 خرداد 1392, 02:25 صبح
منظورتون از دو تا blob چیه؟ منظورتون عدد 8 هست؟ خوب میشه با عملیات مورفولوژی اونها رو جدا کرد. یا برای اعداد دیگه از این روشها استفاده کرد و برای عدد هشت از روشها و ویژگیهای ساده هندسی مانند تعداد حفره ها و ... روشهایی مثل تبدیل فوریه که پیرامون اشکالو به صورت مختصات x , y کدگذاری می کنن و از یه نقطه شروع می کنه تا دوباره برسه به نقطه اول (contour following) و از این مجموعه تبدیل فوریه می گیره و تعدادی از ضرایبشو نگه میداره.
این همه مقالات برای شناسایی حروف دستخط توسط شبکه عصبی نوشته شده . من نمیدونم شما چطور شبکتونو آموزش دادید. بله به نظر منم بهتره که از ویژگیهای سطح بالاتری به جای استفاده از خود تصویر باینری در شبکه استفاده کنیم.

مصطفی ساتکی
جمعه 24 خرداد 1392, 11:26 صبح
منظورتون از دو تا blob چیه؟ منظورتون عدد 8 هست؟ .
نه. فرض کنید در شکل بالا 8 و 3 کاملاً به هم چسبیده باشند 2 تا blob مجزا که چرخش خوردن و به هم چسبیدن دوست عزیز تو ocr از dpi تصویر xheigh و baseline استفاده می کنند باز هم دقیق نیست چه برسه به اینکه نوشته بتونن با هر نویز و چرخش و scale ظاهر شن تو حرف چیز آسونی بنظر میرسه ولی در عمل اینطوری نیست .



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

جواب های خوب روی دست خط اکثراً روی hmm هستش من ندیدم کسی روی دست خط پیوسته با شبکه عصبی جواب گرفته باشه اگر شما سراغ دارید لینک مقاله را قرار بدید تا من هم ببینم .
در شناسایی دستخط بایستی روش matching به گونه ای باشه که نیاز به segmentation نداشته باشه یعنی ما توالی را با توجه به اسکلتون تعیین کنیم و hmm این توالی را شناسایی کنه اینجا هم مشکل در keypoint ها داریم که چطور تعیین شن یکی در مورد نقاط شروع و دیگری هم نحوه quantization.

manafzade
جمعه 24 خرداد 1392, 14:49 عصر
ایشون تصویری که گذاشته جواب میده و نگفته دارای نویز زیاد هست یا پیوسته هست!.
اگه پیوسته باشه یا تصاویری باشه که خیلی از این تصاویرم ادما به سختی تشخیص میدن و بعضی وقتا اشتباه می کنن خوب معلومه سخت میشه.
هدف این تصاویرم همینه که آسون تشخیص داده نشه!! بله HMM هم کاربرد زیادی داره تو دستخط.

JalaliMehr
چهارشنبه 29 خرداد 1392, 10:33 صبح
چرا دیگه دوست عزیز در تصویر بالا 3 و 8 متصل هستند .

manafzade
پنج شنبه 30 خرداد 1392, 20:19 عصر
اگه منظورتون اون خط نازک هست که به راحتی میشه با روشهای مورفولوژی و یا تشخیص کلفتی حذفش کرد!!!
پس متصل نیستن!!!