بخشی از مقاله


تعریف پروژه

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


دو روش کلی ومتفاوت برای شناسایی دست نوشته وجود دارد :on_line و off_line .در سیستم های on_line با استفاده از یک قلم مخصوص بر روی سطحی الکترونیکی روند نوشتن انجام میشود و تشخیص به صورت on_line انجام می گیرد ٬ کاریرد این نوع سیستم ها در حوزه های امنیتی از جمله امضای دیجیتال می باشد .در سیستم های off_line دست نوشته ها قبلا جمع آوری شده اند و شناسایی بر روی آنها انجام می گیرد٬ کاربرد این نوع سیستم ها در خواندن اتوماتیک چک های بانکی ٬آدرس های پستی [1]٬ خواندن نامه های تجاری و...می باشد[2].


یکی از کاربرد های موفق از تشخیص دست نوشته ٬ باز شناسی نویسه های نوری است که جندین سال است که موضوع تحقیقات قرار گرفته است ٬ برای اولین بار فقط کاراکتر های مجزا توسط این سیستم ها مورد شناسایی قرار می گرفتند ودر نتیجه روند تکامل٬ تمام کلمات مورد شناسایی توسط سیستم های ocr قرار گرفتند[3] اسناد دست نوشته برای شناسایی از طریق این گونه سیستم ها باید کاملا تمیز و با کیفیت بالا باشند.

 

در این پروژه می خواهم با استفاده از ویژگی های روش فازی روشی برای شناسایی ارقام دست نویس فارسی ارائه دهم .
برای شناسایی الگو های اعداد با قلم ها و اندازه های مختلف ، نرمالیزه کردن الگو ها امری اجتناب نا پذیر است ، بدین منظور از پنجره ای با اندازه ثابت استفاده کرده و اعداد را با مقیاس مناسبی در داخل این پنجره قرار می دهیم .

 


مهمترین عامل در شناسایی اعداد و حروف توسط چشم انسان ویژگی های مربوط به هر نویسه است ،چشم به طور طبیعی در مقایسه ویژگی های حروف و اعداد به صورت فازی عمل می کند روش های مختلفی را می توان برای استخراج ویژگی ها مورد استفاده قرار داد مثلا می توان یک نویسه را به قطعات کوچکتری شامل : خطوط افقی ،عمودی ، مایل و همچنین منحنی های بسته و کمان های محدب ومقعر تجزیه کرد و نحوه اتصال قطعات را مورد بررسی قرار داد . در این پروژه برای استخراج ویژگی از روش چهار خانه استفاده می شود [14,15]


در این روش یک تصویر با ابعاد64*64 به جدولی با ابعاد 8*8 نگاشته می شود ،بنابر این جدولی شامل 64 خانه خواهد بود که ابعاد هر یک از خا نه های جدول 8*8 است.
برای هر خانه جدول یک ویژگی استخراج کرده ، ویژگی بر اساس فاصله برداری نرمالیزه در[14] انتخاب می شود ،مجموعه داده ای به عنوان مجموعه مرجع در نظر گرفته می شود و میانگین ، واریانس ، تابع عضویت هر ویژگی و سپس متوسط تابع عضویت برای نمونه های مرجع را به دست می آوریم واز این به بعد هر عددی که به سیستم داده شود ویژگی هایش را استخراج می کنیم و تابع عضویت هر ویژگی را به دست آورده و با نمونه های مراجع مقایسه می شود و شناسایی بر اساس یک روش فازی صورت می گیرد.
در این پروژه دو تابع فازیگر را معرفی کرده ، در قسمت های بعدی به چگونگی و جزییات مراحل کار می پردازم .

مروری بر کار های انجام شده

همان طور که گفته شد یکی از کاربرد های موفق از تشخیص دست نوشته ٬ باز شناسی نویسه های نوری است که چندین سا ل است که موضوع تحقیقات قرار گرفته است ٬ برای اولین بار فقط کاراکتر های مجزا توسط این سیستم ها مورد شناسایی قرار می گرفتند ودر نتیجه روند تکامل٬ تمام کلمات مورد شناسایی توسط سیستم های ocr قرار گرفتند[3] اسناد دست نوشته برای شناسایی از طریق این گونه سیستم ها باید کاملا تمیز و با کیفیت بالا باشند.
در نتیجه تحقیقات و تلاش های موثر ٬ سیستم هایی برای زبان انگلیسی[4 ]٬ زبان عربی [5] ٬زبان فارسی٬ [1]زبان چینی[6]و دست نوشته های عددی [7] فراهم است.


اولین گام برای تبدیل تصویر به اطلاعات قابل فهم برای کامپیوتر ٬ پارامتریک کردن عملیات است . لذا اولین عملیاتی که بر روی تصویر انجام می دهیم عملیات پیش پردازش تصویر است که می خواهیم بعضی از متغیر های ناخواسته را که باعث پیچیدگی پروسه تشخیص می شوند را کاهش دهیم ٬ عملیاتی مانند اصلاح کجی ها ٬ هموار سازی ٬ نرمالیزه کردن٬ بخش بندی و.. یر روی تصاویر اعمال می کنیم. [8]


بعد از این مرحله باید ویژگی ها را استخراج کنیم٬در[9] برای انتخاب ویژگی ها ٬ روشhmm دو بعدی را انتخاب کرده است و سپس یک روش دسته بندی را برای شناسایی انتخاب کرده٬ روش های دسته بندی کننده نیز بسیار مختلف است٬ از جمله دسته بندی کننده


های svm ,neural networks, ,knn. .[10,11]
روش های زیادی برای استخراج ویژگی ها وجود دارد اما مسئله اصلی که در این رابطه وجود دارد پیدا کردن روش های استخراج ویژگی نیست بلکه به دنبا ل پیدا کردن بهترین روش برای استخراج ویژگی ها هستیم [12]


در [7] روشی جدید برای استخراج ویژگی ها در نظر گرفته شده است ،ویژگی های استخراج شده توالی توزیع ،barr-feature ،different projecrtion ،different profile می باشد و برای شناسایی شبکه عصبی را انتخاب کر ده است .

در [14],[15] با استفاده از ویژگی های روش فازی در مدلسازی نحوه استدلال مغز برای برخورد با پدیده مبهم ،روشی برای شناسایی الگو های عددی دست نویس و تایپ شده با قلم ها و اندازه های مختلف ارائه می شود.و روش چهار خانه را برای استخراج ویژگی انتخاب کرده اند .

تحلیل موضوع
من برای تشخیص ارقام دست نویس یک سیستم off-line را پیشنهاد کردم که این سیستم به سه مرحله تقسیم می شود[7]
 پیش پردازش
 استخراج ویژگی ها
 شناسایی

پیش پردازش

هدف عملیات پیش پردازش در پردازش تصویر٬ آماده کردن و تمیز کردن تصویر برای مراحل دیگر سیستم ocr می باشد. مجموعه عملیاتی که در این مرحله انجام می دهیم متفاوت است
موارد زیر عملیات پیش پردازش را تحت پوشش قرار می دهد: [8]
طرح صفحه ورودی، scaning، سایز بندی و حذف کردن لکه ها و تیرگی های موجود در تصویرو....
در این پروژه عملیاتی را که من به عنوان پیش پردازش انجام میدهم به شرح زیر است:
 فیلترینگ تصاویر:
تصاویری که ما از اعداد در اختیار داریم ممکن است به دلایل مختلفی از جمله شرایط bad writing ٬ شرایط بد فراگیری٬ وضعیت نویسنده و... آغشته باشد که باید در این مرحله پس از شناسایی نویز تصویر ٬ فیلترینگ مناسب را برای حذف نویز انتخاب کنیم مثلا ممکن است تصاویر آغشته به نویز نمک وفلفل باشند که با چشم نیز دیده می شود که برای حذف آن می توانیم فیلتر میانه را اعمال کرده و به راحتی نویز را از تصویر حذف کنیم .
 نرمالیزه کردن تصویر
همان طور که می دانیم تصاویر دودویی سایز های متغیری دارند که باید قبل از شناسایی و ادامه مراحل کاری سایز تمام تصاویر را به اندازه یکسانی تبدیل نمود که در اینجا سایز تمام تصاویر را به سایز 64*64 پیکسل تبدیل می کنیم.
نمونه ای از تصاویراعداد که به عنوان مرجع انتخاب کرده ایم را ملاحظه می کنید.


استخراج ویژ گی ها
در این مقاله برای استخراج ویژگی ها از روش چهار خانه استفاده شده است، به این ترتیب که تصاویری از اعداد را که در اختیار داریم به ابعاد 64*64 پیکسل ،به جدولی به ابعاد 8*8 نگاشته می شود .بنابر این جدول شامل 64 خانه خواهد بود که ابعاد هر یک از خانه های جدول 8*8 است.
گوشه سمت چپ پایین ترین خانه جدول را به عنوان نقطه مرجع در نظر گرفته ام و فاصله متوسط برداری هر یک ازخانه ها را نسبت به نقطه مرجع به دست آورده ام .
فاصله اقلیدسی هر نقطه با مختصات (I,j) از رابطه زیر به دست می آید
D(I,j)=√i2,j2
و برای به دست آوردن متوسط فاصله برداری برای هر خانه از رابطه زیر استفاده می شود
Dav(b)=1/nb∑db(ik,jk)

که nb تعداد پیکسل های سیا ه در خانهb ام جدول است و db بیانگر فاصله نقاط سیاه در خانه شماره b نسبت به مبدا است .
هر یک از این فواصل برداری به عنوان یک ویژگی در نظر گرفته می شود و در مجموع برای هر عدد 64 ویژگی استخراج می کنیم .
برای خانه های خالی جدول (خانه هایی که در آن پیکسل سیاه وجود ندارد ) مقدار متوسط را صفر در نظر می گیریم .


شناسایی

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

مجموعه فازی و انتخاب تابع عضویت

به منظور شناسایی مجموعه نویسه های عددی ناشناخته با استفاده از منظق فازی ، از یک تابع گوسی برای عضویت استفاده می شود.این تابع بر اساس فاصله برداری نرمالیزه انتخاب می شود.
برای شناسایی یک عدد ناشناخته نیاز به مجموعه داده های عددی مرجع داریم .
برای ایجاد مجموعه داده مرجع ،من 10 نمونه برای هر عدد در نظر گرفته ام که در مجموع 100 نمونه از اعداد را خواهیم داشت و برای این 100 نمونه ویژگی ها را استخراج می کنیم .
روش کار به این صورت است که برای هر رقم 64 ویژگی استخراج می کنیم ونیز برای هر رقم 10 نمونه داریم ،لذا برای هررقم خاص و برای هر ویژگی 10 نمونه ویژگی استخراج می کنیم و برای آنها میانگین و واریانس را مطابق فرمول زیر محاسبه می کنیم .
Mi=1/n∑nj fij

σ2i=1/n ∑jn (fij - mi )2
در روابط بالا i بیانگر شماره ویژگی (i=1,2,…64) و fij بیانگر مقدار ویژگی (فاصله برداری متوسط) برای نمونه j ام در خوشه i ام (خانه i ام جدول) است.و n برابر با تعداد نمونه های مرجع برای هر عدد است.
این کار را برای تمامی اعداد از 0 تا 9 تکرار می کنیم .
بعد از استخراج ویژگی ها تابع عضویت برای هر ویژگی را با استفاده از رابطه زیر به دست می آوریم .
Xi=exp[-(xi-m I )2/ σ i2] µ


که xi ، ویژگی i ام عدد ناشناخته x است .
Mi میانگین ویژگی i ام نویسه مرجع است .


اگر همه xi ها به مقادیر mi نزدیک باشند ،در این صورت عدد ناشناخته به عنوان همان نویسه مرجع شناسایی می شود، چون تمامی توابع عضویت (تمام توابع عضویت 64 ویژگی ) نزدیک 1 بوده و لذا تابع عضویت متوسط تقریبا برابر 1 است .
اگر mi(r) وi2( r) σ ،میانگین و واریانس i ام از مرجع r ام (r=0,1,2…9) باشند ،در این صورت تا بع عضویت متوسط را مطابق فرمول زیر تعیین می کنیم .

av (r) =1/n f ∑ [-(xi-m I )2/ σ i2]µ

در این صورت اگر (r ) avµ بیشینه شود انگاه x متعلق به r خواهد بود و شناسایی صورت می گیرد.
در واقع به این ترتیب عمل می کنیم که بعد از به دست آوردن میانگین و واریانس هرویژگی از یک نمونه مرجع ،متوسط میانگین و واریانس نمونه های مرجع را برای هر نویسه به دست می آوریم ..(برای ارقام 0,1,..9 ).سپس برای هر عدد ناشناخته ای که وارد سیستم می شود و می خواهد مورد شناسایی قرار گیرد با استفاده از فرمول بالا تابع عضویت متوسط را به دست می آوریم ،برای هر عدد 10 تابع عضویت متوسط به دست آورده و هر کدام که از همه بیشتر بود می گوییم عدد مورد شناسایی متعلق به آن خواهد بود.


از انجاییکه بعضی از مجموعه های فازی (ویژگی ها) واریانس بسیار کوچکی داشته و برخی دیگر دارای واریانس بزرگ هستند روشی دیگر را نیز ارائه می دهیم که در آن توابع فازیگر بر اساس مقدار واریانس از همدیگر تفکیک می شوند ،در این صورت تابع عضویت به صورت زیر خواهد بود:

Xi=exp[-(xi-m I )2/ σ i2] σ2>1 µ
xi =exp[-(xi –m I )2 . σ2 ] σ2<1 µ


تحليل كد هاي استفاده شده در شبيه سازي

شبیه سازی این پروژه را در 4 فایل مطلب به انجام رسانده ام .ابتدا باید file z1 را اجرا کنید
با اجرای این فایل برنامه refrancedigit فراخوانی می شود ،ورودی این تابع در هر فراخوانی یک رقم از 0 تا 9 است ،بسته به اینکه ورودی تابع refrancedigit کدام رقم باشددر داخل حلقه تکرارهر بار یک تصویر از رقم مربوطه خوانده می شود و سپس با استفاده از سه حلقه for تو در تو ، تصویر خوانده شده به جدولی با 64 خانه با ابعاد 8*8 نگاشته می شود و برای هرخانه از جدول بررسی می شود که هر پیکسل سیاهی که وجود دارد فاصله برداری اش نسبت به نقطه

مرجع(گوشه سمت چپ پایین ترین خانه جدول ) به دست آید وسپس فاصله متوسط برداری را برای هر خانه از جدول به دست می آوریم . فاصله متوسط برداری برای هر خانه از جدول را در متغیری به نام dav(k) محاسبه می کنیم و سپس به آرایه ای به نام f با ابعاد 20*64 می باشد انتفال می دهیم .هر ستون از آرایه f معرف میانگین فاصله برداری هر ویژگی از نمونه ها می باشد که ما چون در این جا 20 نمونه مرجع برای هر رقم در نظر گرفته ایم تعداد ستون های آرایه f برابر با 20 است .و بعد از استخراج ویژگی ها برای تمام نمونه های یک رقم در فایل z1 میانگین و واریانس هر ویژگی از نمونه های مرجع برای رقم مورد نظر را به دست آورده ،میانگین هرویژگی از نویسه عددی مرجع در آرایه ای به نام aver و واریانس هرویژگی از نویسه عددی مرجع در آرایه ای به نام vari قرار دارد.


عملیات بالا را با استفاده از بیرونی ترین حلقه for که درفایل z1 قرار دارد تکرار کرده و میانگین و واریانس ر ابرای همه نمونه ارقام مرجع (ارقام 0,1..9 ) به دست می آوریم .


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


در این پروژه ما دو نوع تابع عضویت برای شناسایی معرفی کردیم اگر شناسایی عدد با تابع عضویت اولی بخواهد صورت پذیرد m فایل memfun1 را انتخاب کرده و اگر بخواهیم با تابع عضویت دومی شناسایی صورت پذیرد m فایل memfun2 را انتخاب می کنیم .


در m فایل 1 memfun پس از خواندن تصویرعدد مورد نظر ، تصویر خوانده شده به جدولی با 64 خانه با ابعاد 8*8 نگاشته می شود و برای هرخانه از جدول بررسی می شود که هر پیکسل سیاهی که وجود دارد فاصله برداری اش نسبت به نقطه مرجع(گوشه سمت چپ پایین ترین خانه جدول ) به دست آید وسپس فاصله متوسط برداری را برای هر خانه از جدول به دست می آوریم.


بعد از استخراج ویژگی ها ،تابع عضویت را برای هر ویژگی به دست می آوریم به این ترتیب که 10 تابع عضویت برای یک عدد به دست می آوریم که این 10 تابع به دلیل اینکه برای هر نویسه مرجع میانگین و واریانس به دست آوردیم ایجاد می شود (به ازای مقادیر میانگین و واریانس هر نویسه مرجع ( r=0,1..9) 10 تابع عضویت متفاوت به دست می آوریم ) تابع عضویت هر ویژگی در آرایه y قرار دارد ،متوسط تابع عضویت را در آرایه z ذخیره می کنیم
بعد از اینکه متوسط 10 تابع عضویت را به دست آوردیم به منظور شناسایی عدد با


استفاده از یک حلقه for بزرگترین مقدار تابع عضویت متوسط را به دست آورده و اندیس آن را نیز برای این که بدانیم عدد شناسایی شده چند است نگه می داریم ،مقدارماکزیمم تابع عضویت در متغیر max وعدد شناسایی شده در متغیر x قرار دارد.
در m فایل mamfun2 نیز پس از خواندن تصویرعدد مورد نظر ، تصویر خوانده شده به جدولی با 64 خانه با ابعاد 8*8 نگاشته می شود و برای هرخانه از جدول بررسی می شود که هر پیکسل سیاهی که وجود دارد فاصله برداری اش نسبت به نقطه مرجع(گوشه سمت چپ پایین ترین خانه جدول ) به دست آید وسپس فاصله متوسط برداری را برای هر خانه از جدول به دست می آوریم.


در اینجا برای تعیین تابع عضویت بر اساس واریانس عمل می کنیم که نحوه محاسبه آن در قسمت های قبلی آمده است ،) تابع عضویت هر ویژگی در آرایه y1 قرار دارد ،متوسط تابع عضویت را در آرایه z1 ذخیره می کنیم، مقدارماکزیمم تابع عضویت در متغیر 1max وعدد شناسایی شده در متغیر 1x قرار دارد.

شبیه سازی و ارائه نتایج تجربی

همان طور که در قسمتهای قبلی گفته شد ابتدا یک پایگاه داده ای از اعداد ایجاد نمودیم و میانگین و واریانس هر یک از ویژگی ها را برای کل نمونه ها از هررقم به دست آوردیم و سپس تصویرهر عددی که خوانده می شود را ویژگی هایش را استخراج کرده و با استفاده از دو تابع عضویتی که تعریف کردیم میزان تعلق آن به هر یک از ارقام را به دست آوردیم و تعلقش به هر رقم که بیشتر بود همان رقم شناسایی شده است.
نمونه ای از نتایج شبیه سازی شده را برای شناسایی عدد با استفاده از تابع عضویت
(av (r) =1/n f ∑ [-(xi-m I )2/ σ i2]µ) در زیر مشاهده می کنید که برنامه آن در memfun1 موجود است :
در تصویر عددی که به سیستم داده شده را میبینید و متن بالای آن عددی را که سیستم شناسایی کرده







روش فازی که ما برای شناسایی با تایع عضویت ذکر شده انتخاب کرده ایم همیشه درست جواب نمی دهد به عنوان مثال ممکن است عدد 9 را 1 شناسایی کند و یا 5 را 0 شناسایی کند و....
نمونه ای از شناسایی نادرست را با استفاده از تابع عضویت بالا در زیر می بینید:

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


از انجاییکه بعضی از مجموعه های فازی (ویژگی ها) واریانس بسیار کوچکی داشته و برخی دیگر دارای واریانس بزرگ هستند روشی دیگر را نیز ارائه می دهیم که در آن توابع فازیگر بر اساس مقدار واریانس از همدیگر تفکیک می شوند و نیز میزان تعلق عدد نسبت به روش قبلی بیشتر شده ،به عنوان مثال یک تصویر را با استفاده از هر دو تابع عضویت به برنامه می دهیم و میزان تعلق آنها را بررسی می کنیم ،میبینید که میزان تعلق تابع عضویت دوم نسبت به اولی بیشتر است، در جدول زیر نمونه ای از رقم 1 را با هر دو تابع شناسایی کرده ایم :


میزان تعلق عدد1 با استفاده از تابع عضویت روش دوم میزان تعلق عدد1 با استفاده از تابع عضویت روش اول

همان طور که میبینید مقادیر بزرگتری برای تابع عضویت با استفاده از روش دوم به دست می آید

نمونه ای از نتایج شبیه سازی شده را برای شناسایی عدد با استفاده از تابع عضویت روش دوم
در زیر مشاهده می کنید که برنامه آن در2 memfun موجود است :
در تصویر، عددی که به سیستم داده شده را میبینید و متن بالای آن عددی را که سیستم شناسایی کرده:



در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید