در سامانههای پیدا کردن متن در تصویر، هدف آن است که مکان متن موجود در تصویر را مشخص کنیم. برای مثال به تصاویر زیر توجه کنید که چگونه مکان متون موجود در آنها مشخص شده است:
![نمونۀ تصاویر با مشخص شدن مکان متن](https://www.dropbox.com/s/22tff62aun326q0/MSRA-TD500_Example.jpg?dl=1)
کاربرد اصلی این مسئله به عنوان یک پیش پردازش قبل از تبدیل تصویر به نوشتار یا همان OCR است.
* این پروژه توسط یک بنگاه تجاری تعریف شده است.
# مقدمه
امروزه دسترسی همگان به دوربینهای دیجیتال ارزان قیمت، سبب ایجاد حجم عظیمی از تصاویر شده است. دستیابی به اطلاعات سودمند از این حجم عظیم داده، نیازمند پردازشهای دقیق و با کارایی مناسب است. یکی از این پردازشها، تشخیص متن در تصویر است. پیدا کردن محل متن در تصویر یکی از مراحل اصلی فرآیند تبدیل تصویر به نوشتار است.
تبدیل تصویر به نوشتار سابقهای طولانی دارد. در این روش به شکل سنتی، صفحات پویش[^scan]شده بررسی و متن از آنها استخراج میشود. تقریباً در تمام موارد، متون به صورت افقی بوده و پسزمینۀ آنها سفید است.
آنچه که در تبدیل تصویر به نوشتار رخ میدهد؛ با پیدا کردن متن در تصویر تفاوت دارد. در تبدیل تصویر به نوشتار هدف یافتن نویسههای[^characters] استفاده شده در متن است؛ اما در پیدا کردن متن هدف یافتن محل متن در تصویر است.
همانگونه که مشخص است، امروزه پیدا کردن محل متن به عنوان پیشپردازش اصلی تبدیل تصویر به نوشتار، مورد استفاده قرار میگیرد. بررسیها بیانگر آن است که کارایی تبدیل تصویر به نوشتار وابستگی بسیاری به کارایی روش پیدا کردن متن در تصویر دارد[1]. این موضوع در بررسی تصاویر مناظر طبیعی[^images of natural scenes] بسیار محسوستر است.
در روشهای سنتی محل متن توسط کاربر به صورت دستی مشخص میشود. امروزه به دلیل حجم عظیم دادهای که برای داده کاوی مورد استفاده قرار میگیرند؛ این روش کارایی خود را از دست داده است.
در گذشته مشکلات کمتری برای پیدا کردن متن وجود داشت. در اکثر موارد تصاویر مورد بررسی، پسزمینۀ سفید داشتند. جهت متن[^text orientation] نیز تقریبا افقی بود. این موارد از پیچیدگی مسئله کاسته و کار را بسیار سادهتر میکند. ابزارهای امروزی برای بررسی این قسم متون کارایی مناسبی دارند و تقریبا اشتباهات آنها بسیار کم و قابل چشمپوشی است. پیشفرض اکثر این ابزارها استفاده از تصاویر با تفکیکپذیری بالا[^high resolution] و تقریباً سیاه و سفید (متون سیاه و پسزمینه سفید) است. البته برخی از آنها وجود عکس، نمودار و سایر خطوط را نیز تشخیص میدهند.
تصاویری که افراد از مناظر، اماکن و متون تهیه میکنند؛ این پیشفرضها را ندارد. در ادامه به برخی از مشکلات پیدا کردن متن در این قسم تصاویر اشاره شده است[2].
**مشکلات اصلی تصاویر مورد بررسی:**
+ **کیفیت پایین**: یکی از اصلیترین مشکلاتی که برای پیدا کردن متن در تصویر با آن روبرو هستیم. تصاویری که با دوربینهای معمولی ثبت میگردند؛ قطعاً کیفیت پویشگرها[^scanner] را نخواهند داشت.
+ **نورپردازی ناهموار**[^uneven lighting] : میزان نور ممکن است بسیار کم یا بسیار زیاد باشد. امکان تفاوت میزان نور در بخشهای مختلف یک تصویر به دلیل وجود سایه و بازتاب نور نیز وجود دارد. در صورت استفاده از نور مصنوعی مانند فلاش بخشهایی از تصویر روشن و سایر بخشها دارای روشنایی کمتر هستند.
+ **سطوح غیرمسطح**[^nonplaner surfaces] : امکان دارد متن مسطح نبوده و دارای عمق باشد. همچنین ممکن است بخشی از متن در یک سطح و بخشی از آن در سطح دیگری باشد. حالتهای دیگری نیز میتوان برای متن ذکر نمود. به شکل کلی نمیتوان پیشفرض مشخصی را مدنظر گرفت.
+ **پسزمینههای پیچیده**[^complex backgrounds] : وجود پسزمینۀ پیچیده از دو جهت میتواند ایجاد مشکل نماید. اول آنکه برخی از اشیا که دارای ساختار منظم و یا بافت خاصی هستند (مانند درها، پنجرهها، خطوط خیابان، برگ درختان و غیره [3]) به اشتباه متن شناسایی میگردند. دوم آنکه زمانی که پسزمینۀ متن تصویری پیچیده است نمیتوان لبههای[^edges] متن را به درستی مشخص نمود.
+ **جهت متن**: یکی دیگر از مشکلات، جهت متن در تصویر است. هیچ دلیلی برای افقی بودن متن در تصاویر وجود ندارد. این موضوع با مسطح نبودن متن متفاوت است. با فرض مسطح بودن متن، امکان دارد متن جهت افقی نداشته و نسبت به افق دارای زاویه باشد.
در شکل زیر برخی از مشکلات ذکرشده را میتوانید مشاهده کنید[4]:
![مشکلات پیدا کردن و تشخیص متن در تصویر](https://www.dropbox.com/s/3wna8enkchipoo7/36495420711014775178.jpg?dl=1)
موارد ذکر شده در بالا مشکلات اصلی برای پیدا کردن متن در تصاویر است. مشکلات دیگری مانند تنوع در رسمالخط، فونت، رنگ و اندازه متون وجود دارد.
حال به بررسی اهمیت پیدا کردن و تشخیص متن در تصویر میپردازیم. میتوان این موضوع را با طرح سوالی مورد بررسی قرار داد. چرا با این سطح از پیچیدگی به دنبال پیدا کردن و تشخیص متن در تصویر هستیم؟ این کار میتواند سببب بهبود روشهای مورد استفاده در ابزارهای نویسهخوان نوری[^optical character recognition] شود. با استفاده از بهبود روشها میتوان عکسهای تهیه شده با دوربینهای معمولی را نیز به نوشتههای مناسب تبدیل نمود.
دلیل دیگر این کار استفاده از متن تصویر برای نمایه[^index]کردن آن است[4]. فرض کنید در تصویری عبارت bank به چشم میخورد. میتوان حدس زد که این تصویر مربوط به ورودی یک بانک است. بررسی این مورد از حوزۀ این تحقیق خارج بوده و تنها برای بیان انگیزههای مطرح برای تشخیص متن ذکر شدهاست.
# کارهای مرتبط
جانگ و همکارانش [4]، معماری کلی برای سامانههای استخراج اطلاعات متن[^text information extraction] به اختصار TIE ارائه کردهاند. این سامانه در شکل زیر [4-5] نمایش داده شده است:
![معماری پیشنهادی برای TIE](https://www.dropbox.com/s/cz446bzv5h4m8xn/16004009802838237574.jpg?dl=1)
به طور کلی این معماری برگرفته از الگوی لوله و فیلتر[^pipe and filter pattern] است. چهار مرحله اصلی آن عبارتند از:
+ تشخیص موجود بودن متن[^text detection] در تصویر
+ پیدا کردن مکان متن[^ text localization] در تصویر
+ استخراج متن و بهبود کیفیت آن[^text extraction and enhancement]
+ بازشناسی نویسههای[^characters recognition] متن
از میان مراحل بالا، دو مرحلۀ مرزبندی شده در شکل بالا یعنی تشخیص موجود بودن متن و پیدا کردن مکان آن در تصویر، در کارایی سامانههای TIE تاثیر بسزایی دارند[5]. لازم به ذکر است در این پژوهش هدف پیدا کردن مکان متن در تصویر است. در ادامه به اختصار به معرفی این دو مرحله میپردازیم. همچنین کارهای مرتبط با این پژوهش در بررسی مرحلۀ دوم ذکر خواهند شد.
**تشخیص متن**: در این مرحله، اطلاعات پیشین[^prior information] در مورد وجود داشتن متن در تصویر در اختیار نیست. در واقع وجود داشتن یا نداشتن متن در تصویر باید تشخیص داده شود[4]. این مرحله از حیطۀ کار این پژوهش خارج فرض میشود. فرض ما بر این است که تمامی تصاویر مجموعه دادگان دارای متن هستند.
به نظر جانگ و همکارانش [4] محققان توجه زیادی به این مرحله نداشتهاند. دلیل آن را میتوان در حوزۀ کاربرد سامانههای TIE یافت. معمولا از این سامانهها برای بازشناسی متن در تصاویری استفاده میکنیم که از وجود داشتن متن در آنها اطمینان داریم. البته زمانی که هدف بازشناسی متن در ویدئو است، این مرحله اهمیت بسیاری پیدا میکند.
**پیدا کردن مکان متن**: روشهای موجود برای پیدا کردن مکان متن را میتوان تقریبا به دو گروه اصلی تقسیم کرد[3-4]. مبتنی بر بافت[^texture-based] و مبتنی بر ناحیه[^region-based].
+ روش مبتنی بر بافت: این روشها با تحلیل بافت عکس، متن موجود در آن را پیدا میکنند. در اینجا متن به صورت یک بافت خاص مدنظر قرار میگیرد و از ویژگیهای آن استفاده میشود. به طور کلی با استفاده از فیلترها و برخی تبدیلها مانند تبدیل موجک[^wavelet]، بردارهای ویژگی از عکس بدست میآیند. این بردارها ممکن است به ماشین یادگیری یا ردهبند ارائه شوند و یا از روشهای دیگری برای پیدا کردن مکان متن استفاده شود.
+ روش مبتنی بر ناحیه: در این روشها با استفاده از تشخیص لبه و خوشهبندی رنگی[^color clustering] مکانهای کاندید برای حضور متن پیدا میشوند. برای پیدا کردن نویسهها از روش مولفههای همبند[^connected component] استفاده میشود. نواحی بدون متن با استفاده از قواعد اکتشافی[^heuristic rules] حذف میشوند.
دو گروه بالا تقسیمبندی کلی برای روشهای پیدا کردن متن ارائه میدهند. بسیاری از روشها ترکیبی[^hybrid] از دو روش بالا هستند. همچنین محققان به این نتیجه رسیدهاند که استفاده از برخی از تبدیلهای مورد استفاده در سیگنالهای گسسته در زمان میتواند به فرآیند تشخیص متن بسیار کمک کند. برخی از این تبدیلها برای ایجاد بردار ویژگیها استفاده میشوند و برخی از آنها نیز برای حذف محتوای بدون متن کاربرد دارند.
اپشتاین و همکارانش [1] از SWT [^stroke width transform] برای استخراج ویژگی از عکس استفاده کردهاند. ویژگیهای استخراج شده با این تبدیل با استفاده از روشی مبتنی بر مولفههای همبند (CC)، تبدیل به حروف شدهاند. سپس حروف تبدیل به خطوط شده و از آنها کلمات بدست آمدهاند. فلوچارت مراحل بیان شده را به صورت کامل در شکل زیر مشاهده میکنید[1]:
![فلوچارت الگوریتم پیشنهادی اپشتاین](https://www.dropbox.com/s/edwb6j8uvwpxc1b/49052051722599089459.jpg?dl=1)
یائو و همکارانش [3] رویکرد جدیدی را برای پیدا کردن متن ارائه کردهاند. این رویکرد برای پیدا کردن متن با جهتهای دلخواه مناسب است. چهار مرحلۀ اصلی آن را همراه با جزئیات در شکل زیر مشاهده میکنید:
![مراحل رویکرد پیشنهادی](https://www.dropbox.com/s/382wtc2tf0mg9mg/11935976296473882706.jpg?dl=1)
رویکرد بالا برگرفته از الگوی لوله و فیلتر است. میتوان دریافت که هر بخش وظیفه مخصوص به خودش را دارد. خروجی هر قسمت نیز به عنوان ورودی قسمت بعدی مورد استفاده قرار میگیرد. در شکل زیر برخی از نتایج رویکرد پیشنهادی نمایش داده شدهاند:
![متنهای پیدا شده](https://www.dropbox.com/s/j9671rdyo0x8nqc/36232962824142593289.jpg?dl=1)
پان و همکارانش [5] روشی ترکیبی را ارائه کردهاند. این روش دارای سه مرحله اصلی پیشپردازش، تحلیل مولفه همبند و گروهبندی متن است. در اینجا استخراج ویژگیها با در نظر گرفتن بافت تصویر صورت میگیرد. سپس با بدست آوردن مولفههای همبند و استفاده از روشهای ابتکاری متن بدست میآید. در فلوچارت زیر مراحل سامانه پیشنهادی را مشاهده میکنید[5]:
![فلوچارت سیستم پیشنهادی پان](https://www.dropbox.com/s/zmj79z3qpttbad6/25407509101622661269.jpg?dl=1)
چن و همکارانش [6] روشی را بر اساس استخراج نواحی کاندید، هرس آنها و گروهبندی ارائه کردهاند. در این روش ابتدا نواحی کاندید برای وجود داشتن متن بدست میآیند. سپس با اعمال دو فیلتر مختلف (فیلتر بر اساس مولفههای همبند و فیلتر بر اساس SWT) نواحی بدون متن هرس شده و در انتها با تشکیل خطوط، کلمات بدست میآیند. در فلوچارت زیر مراحل به شکل کامل ذکر شدهاند:
![مراحل سیستم پیشنهادی چن](https://www.dropbox.com/s/8y4rnj06xdfczma/95209902842303359159.jpg?dl=1)
# آزمایشها
در این بخش ابتدا به معرفی مجموعه دادگان مورد استفاده میپردازم. سپس کد ایجاد شده برای بدست آوردن مکان متن با استفاده از فلوچارت توضیح داده میشود. در آخر نیز نتایج گزارش خواهند شد.
**مجموعه دادگان**: در این پروژه از مجموعه دادگان استفاده شده در ICDAR[^International Conference on Document Analysis and Recognition] 2013 استفاده شده است. این دادهها از طریق [سایت](http://dag.cvc.uab.es/icdar2013competition/?ch=2&com=tasks) این کنفرانس در دسترس هستند. البته برای دریافت آنها باید در سایت ثبتنام کنید.
دادههایی مورد استفاده عکسهای مربوط به چالش[^challenge] دوم این کنفرانس است. این عکسها شامل دو بخش آموزش و آزمون هستند. 229 عکس برای آموزش و 233 عکس برای آزمون ارائه شدهاند. در مجموع 462 عکس در این مجموعه وجود دارد.
نتایجی که در مقاله ارائه شده این کنفرانس[7] بیان شدهاند، برای دادگان آزمون بدست آمده است. به طور کلی در این قسم مسائل که کلاس مثبت[^positive] و تشخیص درست آن اهمیت دارد، برای بیان نتایج از دو سنجه دقت[^precision] و فراخوانی[^recall] برای بیان نتایج استفاده میکنند. برای این دادگان در مقاله ارائه شده بعد از کنفرانس[7] دقت و فراخوانیهای زیر گزارش شدهاند:
![نتایج پیدا کردن مکان متن ارائه شده در مقاله کنفرانس](https://www.dropbox.com/s/lsbk4uturt0xppk/ICDAR2013Task2.1Results.JPG?dl=1)
لازم به ذکر است که این نتایج برای روشهای ارائه شده به کنفرانس گزارش شدهاند. شما میتوانید جدیدترین نتایج را از طریق این [لینک](http://dag.cvc.uab.es/icdar2013competition/?ch=2&com=results) مشاهده کنید.
**روش پیشنهادی**: روش پیشنهادی من، شکل ساده شده و البته تغییر یافتۀ روش ارائه شده در [6] است. در مثالهای موجود در متلب، کدی وجود دارد که به شکل ساده به پیادهسازی این روش پرداخته است. شما میتوانید این مثال را در این [لینک](http://ukwww.mathworks.com/help/vision/examples/automatically-detect-and-recognize-text-in-natural-images.html) مشاهده کنید. کد ارائه شده با ضریب اطمینان بالایی تنها برای چند مثال خاص نتیجه مناسب و قابل قبولی ایجاد میکند. برای عکسهای ارائه شده در خود مثال نتیجه بسیار عالی است. اما برای مجموعه دادگان در اختیار من خروجی خاصی تولید نکرد. در واقع دقت و فراخوانی بدست آمده بسیار ناچیز و غیرقابل قبول بود.
با توجه به مطالب بیان شده به بهبود مثال ارائه شده، تغییر و بهتر کردن نتایج حاصل از آن پرداختم. بخشهایی از آن را حذف و قسمتهایی را به آن افزودم. همچنین پس از گذشت زمان کمی، هم به صورت تجربی و هم با مراجعه به منابع متوجه شدم که این روش نیازمند تنظیمات دستی[^hand tuning] مناسب برای رسیدن به نتایج قابل قبول است. بنابراین در بخشهایی از کد تغییراتی ایجاد کردم تا نتایج بهتر شوند. نتیجه کار تا این لحظه را در سایت گیتهاب قرار دادهام که از طریق این [لینک](https://github.com/amsoft/textLocalizaton) و لینک ارائه شده در پایین صفحه میتوانید آن را مشاهده کنید.
به صورت خلاصه کد ارائه شده شامل مراحل زیر است. در ادامه به اختصار به توضیح هر کدام از بخشهای گفته شده میپردازم. سپس نتایج آزمایش را نمایش میدهم. همچنین خلاصه نتایج به صورت دقت و فراخوانی نیز ذکر خواهند شد.
![روش ارائه شده](https://www.dropbox.com/s/1ihhdbkuxmc0mzk/ProposedMethod.jpg?dl=1)
*توضیحات روش پیشنهادی*: این روش دارای 7 مرحله کلی است:
+ مرحله اول: چونکه متنهای موجود در تصویر در بیشتر موارد دارای رنگ یکسانی هستند، میتوان با استفاده از تابع یابنده نواحی MSER[^maximally stable extremal regions] مکانهایی که شدت[^intensity] رنگ مشابه دارند را فیلتر کرد.[8] نکته قابل توجه در این مرحله وابستگی کامل نتایج به تنظیمات دستی است. یعنی حتما باید ورودیهای تابع مناسب انتخاب شوند تا تابع نواحی مناسبی را پیدا کند.
+ مرحله دوم: در این مرحله با استفاده از تابع یابنده لبه، با استفاده از متد سوبل[^sobel] لبهها را پیدا میکنیم.
+ مرحله سوم: این مرحله نقش مهمی در پیدا کردن نویسهها دارد. با استفاده از تابع کتابخانهای متلب، داخل نواحی که لبههای آن پیدا شده پر میشوند.
+ مرحله چهارم: نتایج مرحله اول و سوم به صورت عکسهای دودویی تبدیل به ماسک میگردند. نواحی که توسط آنها بدست آمدهاند با عدد منطقی یک نمایش داده میشوند. خروجی عدد یک در عکس دودویی به صورت سفید نمایش داده میشود. در شکل زیر دو نمونه از این ماسکها را میبینید. سمت راستی مربوط مرحله اول و سمت چپی مربوط به مرحله سوم است.
![ماسک لبه و MSER](https://www.dropbox.com/s/px7qjwnfe2ufm9n/edgeAndmserMask.jpg?dl=1)
در این مرحله با استفاده از AND این دو ماسک تبدیل به یک ماسک میشوند. در واقع نواحی کاندید[^candidate regions] برای حضور متن از این ماسک بدست میآیند. در شکل زیر نتیجه این مرحله را مشاهده میکنید.
![نتیجه مرحله چهارم](https://www.dropbox.com/s/b2096p07fn67dbu/edgeEnhancedMSERMask.jpg?dl=1)
+ مرحله پنجم:در این مرحله با استفاده از تحلیل مولفههای همبند، مناطقی که متن در آنها وجود ندارد هرس[^prune] میشوند. خروجی این مرحله تاثیر بسزایی در کم کردن تعداد اشتباهات[^false positive] دارد. در شکل زیر خروجی این مرحله را مشاهده میکنید.
![نتیجه مرحله پنجم](https://www.dropbox.com/s/crukty6j4px6gxp/regionFilteredTextMask.jpg?dl=1)
+ مرحله ششم: در این مرحله حروف به هم متصل شده و خطوط را تشکیل میدهند. نتایج حاصل از این مرحله به عنوان مکانهایی که متن در آنها وجود دارد اعلام خواهند شد. در شکل زیر نتیجه این مرحله را مشاهده میکنید.
![نتیجه مرحله ششم](https://www.dropbox.com/s/6g4yojusgg2b4ya/afterMorphologyMask.jpg?dl=1)
+ مرحله هفتم: در این مرحله مکان متن در عکس اصلی مشخص میشود. در واقع این مرحله وظیفه ایجاد خروجی را برعهده دارد در شکل زیر خروجی نمونه ارائه شده را مشاهده میکنید.
![عکس خروجی](https://www.dropbox.com/s/6ys4h5c6j4z2mbq/output.jpg?dl=1)
تا اینجا مراحل روش پیشنهادی به اختصار بیان شدند. در ادامه ابتدا خلاصه عملکرد روش بیان شده و سپس نمونههایی از خروجی نمایش داده خواهند شد.
**نتایج روش پیشنهادی**: مزیت اصلی این روش نسبت به سایر روشها سادگی و در عین حال عملکرد قابل قبول آن است. در جدول زیر خلاصۀ عملکرد آن را برای دادههای آموزش، آزمون و کل دادهها مشاهده میکنید.
| نوع داده ورودی | دقت | فراخوانی | F-score |
|:---------------|:--------:|:--------:|:--------:|
| دادۀ آموزش | 79.03٪ | 70.04٪ | 74.26٪ |
| دادۀ آزمون | 73.13٪ | 61.50٪ | 66.81٪ |
| کل دادهها | 75.78٪ | 65.24٪ | 70.12٪ |
در شکلهای زیر نتایج را در سه گروه مشاهده میکنید. در سری اول عکسهایی را میبینید که کد عملکرد خوبی داشته است. در سری دوم عملکرد کد قابل قبول است اما در سری سوم نتایج اصلا خوب نیستند.
![نتایج خوب](https://www.dropbox.com/s/178jo12tsgf08z0/GoodResult.jpg?dl=1)
![نتایج قابل قبول](https://www.dropbox.com/s/lahgs4i18oqvpdg/AcceptableResult.jpg?dl=1)
![نتایج ضعیف](https://www.dropbox.com/s/8ypxu76fozf7ic1/BadResult.jpg?dl=1)
**بهبود نتایج**:
# کارهای آینده
نتایجی که در بالا مشاهده کردید بعد از اجرای 6 مرحله آزمایش بر روی دادها بدست آمده است و نتایج گزارش شده بهترین خروجی بدست آمده در این آزمایشها است.
پس از اجرای آزمایشهای متعدد و مشاهده نتایج آنها دو موضوع به شکل مشخصی نظر مرا جلب کرد:
+ عکسهای ارائه شده به عنوان دادههای آزمون نسبت به عکسهای آموزش ساختار پیچیدهتری دارند و نتایج بدست آمده برای آنها ضعیفتر از دادههای آموزش است.
+ در میان عکسها، تعدادی عکس با تفکیک پذیری بالا و کیفیت 10 مگا پیکسل وجود دارند. بسیاری از اشتباهات در این عکسها رخ میدهند. مکان متنهای موجود در آنها به خوبی بدست نیامده و همچنین سبب کاهش سرعت اجرای برنامه هستند.
بهبود نتایج برای عکسهای آزمون هدف کار من قرار گرفت؛ همچنین به این فکر افتادم که سرعت اجرای برنامه را افزایش دهم. در این بین متوجه شدم که تابع یابنده لبهها در متلب به صورت پیش فرض لبههای پیدا شده را نازک[^thin] میکند. این عبارات در مستندات تابع edge متلب ذکر شده اند:
> BW = edge(I,'sobel',...,options) provides an optional string input. String 'nothinning' speeds up the operation of the algorithm by skipping the additional edge thinning stage. By default, or when 'thinning' string is specified, the algorithm applies edge thinning.
همان گونه که مشخص است استفاده از عبارت 'nothinning' سبب افزایش سرعت اجرا خواهد شد. پس از اضافه کردن این عبارت شاهد بهبود عمکرد قابل قبولی در پیدا کردن مکان متن نیز بودم. در واقع هدف من افزایش سرعت اجرای برنامه بود اما در عوض با اجرا نشدن مرحله نازک شدن لبهها عملکرد برنامه بهبود یافت.
به نوعی میتوان گفت به طور غیر مستقیم و اتفاقی هدف اصلی من یعنی بهبود نتایج بدست آمد؛ اما هنوز سرعت اجرای برنامه زیاد به نظر میرسید. به این فکر افتادم که با کاهش اندازه عکسها به شکلی که نتایج تغییر محسوسی نداشته باشند سبب بالارفتن سرعت اجرای برنامه شوم. بنابراین در زمان خواندن عکس و پس از تبدیل عکس رنگی به خاکستری[^gray]، اگر تفکیکپذیری عکس خاکستری از عدد مشخصی بیشتر باشد، اندازه آن را کاهش داده و مراحل را اجرا کردم. پس از اتمام مراحل و بدست آمدن ماسک نهایی، اندازه آن را به اندازه اصلی[^original] برگردانده و نتایج را در عکس ورودی تاثیر دادم. با انجام این کار توانستم بدون اینکه تاثیری در نتایج بوجود بیاید، سرعت اجرای برنامه را افزایش دهم.
نتیجه آنکه قبل از تاثیر این تغییرات برای 462 عکس موجود زمانی برابر 867.617459 ثانیه برای اتمام اجرای برنامه در محیط متلب صرف شد؛ یعنی به طور متوصط در حدود 1.88 ثانیه برای هر عکس. پس از اعمال این تغییرات برای 462 عکس موجود زمانی برابر 555.360694 ثانیه بدست آمد؛ یعنی به طور متوسط در حدود 1.2 ثانیه برای هر عکس. لازم به ذکر است این نتایج در یک زمان و بر روی یک دستگاه بدست آمده و سعی داشتهام تمامی شرایط آزمایش یکسان باشند. نکته قابل توجه در اینجا عدم تاثیر این موضوع در نتایج است. در جدول زیر نتایج بهبود یافته را مشاهده میکنید.
| نوع داده ورودی | دقت | فراخوانی | F-score |
|:---------------|:--------:|:--------:|:--------:|
| دادۀ آموزش | 76.59٪ | 81.13٪ | 78.79٪ |
| دادۀ آزمون | 73.42٪ | 70.03٪ | 71.69٪ |
| کل دادهها | 74.89٪ | 74.88٪ | 74.89٪ |
همانگونه که مشاهده میکنید و میتوان از مقایسه این نتایج با نتایج قبلی فهمید، دقت برای دادههای آموزش و به فراخور آن برای کل دادهها کاهش داشته است اما در عوض فراخوانیها افزایش قابل ملاحظهای دارند؛ به طوری که میانگین هارمونیک در هر سه حالت افزایش یافته است.
میتوان این گونه نتیجه گرفت که با نازک نشدن لبهها نواحی بیشتری که امکان وجود داشتن متن در آنها وجود دارد در نظر گرفته شدهاند. در میان این نواحی برخی واقعا دارای متن هستند که پیدا شدن آنها سبب افزایش فراخوانی شده است؛ اما بعضی از آنها نیز نواحی اشتباه هستند که پیدا شدن آنها نیز سبب کاهش دقت شده است. البته میزان افزایش خروجیهای درست آنقدر بوده است که بتواند کاهش دقت را جبران کند. شما میتوانید کد بهبود یافته را در سایت گیتهاب و از طریق این [لینک](https://github.com/amsoft/textLocalizaton/blob/master/textLocalizationV2.m) مشاهده کنید. در شکل زیر برخی از خروجیهای بدست آمده را مشاهده میکنید. عکسهای ردیف اول مربوط به آزمایش قبلی و عکسهای ردیف دوم مربوط به کد بهبود یافته است.
![بهبود نتایج 1](https://www.dropbox.com/s/xcjfrd7g14em79i/Improved1.jpg?dl=1)
اگر مستطیلهای که توسط برنامه به دور متن کشیده شدهاند به وضوح مشخص نیستند، میتوانید با دانلود کردن و بزرگنمایی[^zoom]، آنها را مشاهده کنید. در شکل زیر بخش دیگری از خروجیهای بهبود یافته را مشاهده میکنید.
![بهبود نتایج 2](https://www.dropbox.com/s/6338lrtz48ko575/Improved2.jpg?dl=1)
به دلیل حجم زیاد این عکسها و برای جلوگیری از سنگین شده صفحه پروژه از آوردن الباقی عکسها در اینجا خودداری کرده و لینک دانلود آنها را در اختیار شما قرار میدهم. در صورت تمایل میتوانید چهار سری دیگر از این عکسها را از طریق این [لینک](https://www.dropbox.com/s/q9objusskrepfuw/Improved%20Samples.zip?dl=1) دانلود کنید. همچنین تعدادی از عکسها با کیفیت بالا که بهبود نتایج آنها قابل توجه بوده است از طریق این [لینک](https://www.dropbox.com/s/np0dsq3591aeaac/Improved%20Samples%20High%20Res.zip?dl=1) قابل دریافت هستند. حجم این بخش از عکسها زیاد بوده و در حدود 20 مگابایت است. عکسها با پسوند a مربوط به مرحله قبل و عکسها با پسوند b مربوط به این مرحله هستند.
خوب به غیر از نتایج خوب، نتایج بد نیز بدست آمدهاند. شاید بتوان تاثیر اصلی این تغییرات را در دو عکس زیر مشاهده کرد. عکس اول مربوط به مرحله قبل و عکس دوم مربوط به کد بهبود یافته است. همانگونه که مشاهده میکنید، مکان متنها به خوبی پیدا شدهاند اما تعداد نواحی اشتباه نیز افزایش یافتهاند. در واقع نازک نشدن لبهها سبب شده نواحی بیشتری به عنوان مکان متن اعلام شوند. به نظر من با مقایسه دو عکس زیر به راحتی میتوان تاثیر اصلی بهبود اعمال شده را مشاهده کرد.
![نتیجه 1](https://www.dropbox.com/s/mv2dfqttdayrbmn/conclusion1.jpg?dl=1)
![نتیجه 2](https://www.dropbox.com/s/mrmcq02n3jwfmo5/conclusion2.jpg?dl=1)
در آخر نیز بخشی از خروجیها که نتایج آنها بدتر شده را نیز مشاهده میکنید. ردیف اول هر کدام از عکسها مربوط به مرحله قبل و ردیف دوم مربوط به این مرحله است.
![عدم بهبود نتایج 1](https://www.dropbox.com/s/23mwu9nbifonxgm/NotImproved1.jpg?dl=1)
![عدم بهبود نتایج 2](https://www.dropbox.com/s/g9t2puicyzq2vp3/NotImproved2.jpg?dl=1)
در اینجا بر خودم واجب میبینم از شما برای اینکه حجم این صفحه به علت استفاده از عکسهای زیاد بالا رفته عذر خواهی کنم.
دوباره نیز ذکر میکنم؛ برای مشاهده بهتر نتایج، عکسها را دانلود کرده و با بزرگنمایی نواحی بدست آمده را مشاهده و با هم مقایسه کنید. دلیل اصلی کم نکردن کیفیت و حجم عکسها نیز همین است.
# کارهای آینده
همانگونه که در بخش کارهای مرتبط به آن اشاره شد، در یک تقسیم بندی کلی، روشهای پیدا کردن متن در تصویر را به دو بخش اصلی تقسیم میکنند: 1- روش مبتنی بر بافت 2- روش مبتنی بر ناحیه. روش ذکر شده در اینجا، در این تقسیمبندی جزء روشهای مبتنی بر ناحیه قرار میگیرد. همانطور که گفته شد این روشها بر اساس تشخیص لبه و خوشهبندی رنگی نواحی مستعد را یافته، متن را با استفاده از تحلیل مولفههای همبند بدست میآورند. همچنین نقطه قوت اصلی این روشها استفاده از قواعد اکتشافی است.
یکی از کارهایی که میتوان در این بخش انجام داد استفاده از تبدیل SWT به جای استفاده از خوشهبندی رنگی است. به شکل خلاصه این تبدیل نواحی را با توجه به ضخامت آنها نمایش میدهد. از آنجا که اکثر متنهای موجود در یک تصویر ضخامت یکسانی دارند میتوان از این تبدیل برای استخراج نواحی مستعد استفاده کرد [1-3].
همچنین در میان قواعد اکتشافی مورد استفاده، برخی از همین تبدیل برای هرس کردن خروجی مرحلۀ پیدا کردن نواحی مستعد استفاده میکنند[6]. میتوان با استفاده از این تبدیل نیز به بهبود نتایج پرداخت.
در روش دیگر یعنی روشهای مبتنی بر بافت از ماشینهای یادگیری مانند ماشین بردار تکیهگاه[^support vector machine] و همچنین پرسپترون چند لایه[^multilayer perceptron] و سایر ماشینهای یادگیری استفاده میکنند. البته یکی از مشکلات بزرگ این روش استخراج ویژگیهای مناسب برای استفاده این ماشینها است. این روش را نمیتوان به روش پیشنهادی در اینجا افزود و باید از ابتدا به معرفی روش جدیدی پرداخت.
# مراجع
[1] B. Epshtein, E. Ofek, Y. Wexler, "Detecting Text in Natural Scenes with Stroke Width Transform," *IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2010*, San Francisco, CA, pp. 2963-2970.
[2] J. Liang, D. Doermann, H. Li, "Camera-based Analysis of Text and Documents: a Survey," *International Journal of Document Analysis and Recognition (IJDAR)*, vol. 7, no. 2-3, pp. 84-104, 2005.
[3] C. Yao, X. Bai, W. Liu, Y. Ma and Z. Tu. "Detecting Texts of Arbitrary Orientations in Natural Images," *IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2012*, Providence, RI, pp. 1083-1090.
[4] K. Jung, K. I. Kim, A. K. Jain, "Text Information Extraction in Images and Video: a Survey," *Pattern Recognition, Elsevier*, vol. 37, no.5, pp. 977–997, 2004.
[5] YF. Pan, X. Hou, CL. Liu, "A Hybrid Approach to Detect and Localize Texts in Natural Scene Images," *IEEE Transactions on Image Processing*, vol. 20, no. 3, pp. 800-813, 2011.
[6] H.Chen et al., "Robust text detection in natural images with edge-enhanced Maximally Stable Extremal Regions," *18th IEEE International Conference on Image Processing (ICIP), 2011*, Brussels, pp. 2609-2612.
[7] D. Karatzas et al., "ICDAR 2013 Robust Reading Competition," *12th International Conference on Document Analysis and Recognition (ICDAR), 2013*, Washington, DC, pp. 1484-1493.
[8] J. Matas, O. Chum, M. Urban, T. Pajdla, "Robust Wide-Baseline Stereo from Maximally Stable Extremal Regions," *British Machine Vision Computing 2002*, vol. 22, no. 10, pp. 761–767, 2004.
[9] S. M. Lucas et al., "ICDAR 2003 Robust Reading Competitions: Entries, Results, and Future Directions," *International Journal of Document Analysis and Recognition (IJDAR)*, vol. 7, no. 2-3, pp. 105-122, 2005.
[10] S. M. Lucas, A. Panaretos, L. Sosa, A. Tang, S. Wong, R. Young, "ICDAR 2003 Robust Reading Competitions", * Proceedings of 7th International Conference on Document Analysis and Recognition (ICDAR), 2003*, Edinburgh, UK, pp. 682.
[11] S. M. Lucas, "ICDAR 2005 Text Locating Competition Results," *Proceedings of 8th International Conference on Document Analysis and Recognition (ICDAR), 2005*, vol. 1, pp. 80-84.
[12] D. Karatzas, S. R. Mestre, J. Mas, F. Nourbakhsh, P.P Roy, "ICDAR 2011 Robust Reading Competition Challenge 1: Reading Text in Born-Digital Images (Web and Email)," *International Conference on Document Analysis and Recognition (ICDAR), 2011*, Beijing, pp. 1485-1490.
[13] A. Shahab, F. Shafait, A. Dengel, "ICDAR 2011 Robust Reading Competition Challenge 2: Reading Text in Scene Images," *International Conference on Document Analysis and Recognition (ICDAR), 2011*, Beijing, pp. 1491-1496.
# پیوندهای مفید
+ [Stroke Width Transform, Implementation](http://libccv.org/doc/doc-swt/)
+ [Dataset: MSRA-TD500][TD500]
+ [The Street View Text Dataset](http://www.iapr-tc11.org/mediawiki/index.php/The_Street_View_Text_Dataset)
+ [ICDAR 2003 Robust Reading Competitions](http://www.iapr-tc11.org/mediawiki/index.php/ICDAR_2003_Robust_Reading_Competitions)
+ [ ICDAR 2013 Robust Reading Competition](http://dag.cvc.uab.es/icdar2013competition/?com=introduction)
+ [لینک پروژه در گیتهاب](https://github.com/amsoft/textLocalizaton)
+ [خروجیهای بهبود یافته](https://www.dropbox.com/s/q9objusskrepfuw/Improved%20Samples.zip?dl=1)
+ [خروجی بهبود یافته برای عکسهای با کیفیت بالا](https://www.dropbox.com/s/np0dsq3591aeaac/Improved%20Samples%20High%20Res.zip?dl=1)
[TD500]:http://www.iapr-tc11.org/mediawiki/index.php/MSRA_Text_Detection_500_Database_(MSRA-TD500)