تشخیص زن یا مرد بودن با پردازش تصویر در متلب و Avr
شرح پروژه:
به اينصورت است که عکسي درزمان ورود فرد ، ازجلوي درب ورودي ساختمان به وسيله دوربين گرفته شود و تشخيص داده شود که شخصي که وارد شده زن يا مرد است.
بنا بر شرح پروژه، اساس کار ما پردازش تصاوير است. که به بررسی آن می پردازيم :
فصل 1
مقدمه
یک عکس بیش از ده هزار کلمه می ارزد.
گمنام
1.1 زمينه
پردازش تصوير رقمي دانش جديدي است كه سابقه آن به پس از اختراع رايانه هاي رقمي باز مي گردد.
با اين حال اين علم نو پا در چند دهه اخير از هر دو جنبه نظري و علمي پيشرفتهاي چشمگيري داشته است.
سرعت اين پيشرفت به اندازه اي بوده است كه هم اكنون و پس از اين مدت نسبتا كوتاه، به راحتي مي توان رد پاي پردازش تصوير رقمي را در بسياري از علوم و صنايع مشاهده نمود .
بعضي از اين كاربردها آنچنان به پردازش تصوير وابسته هستند كه بدون آن ، اساسا قابل استفاده نمي باشند.
معرفي چند دسته مهم از كاربردهاي پردازش تصوير به شرح زير مفيد به نظر مي رسد:
الف)كاربرهاي عكاسي مانند ارتقا، بازسازي تصاوير قديمي ، باز سازي تصاوير خراب شده با نويز و بهبود ظاهر تصاوير معمولي
ب)كاربردهاي پزشكي مانند ارتقاي ويژگيهاي تصاوير اشعه ايكس،توليد تصاوير ,MRI CT-Scan
ج)كاربردهاي امنيتي مانند تشخيص حركت(در دزدگير ها)،تشخيص اثر انگشت،تشخيص چهره و تشخيص امضاء
د)كاربردهاي نظامي مانند تشخيص و رهگيري خودكار اهداف متحرك يا ثابت از هوا يا از زمين
هـ)كاربردهاي سنجش از راه دور مانند ارتقا و تحليل تصاوير هوايي و ماهواره اي(برداشته شده از مناطق مختلف جغرافيايي) كه در كاربردهاي نقشه برداري،كشاورزي، هواشناسي و موارد مفيد هستند.
و)كاربردهاي صنعتي مرتبط با خودكار سازي صنايع مانند تفكيك محصولات مختلف بر اساس شكل يا اندازه آشكار سازي نواقص و شكستگي هاي موجود در محصولات، تعيين محل اشياء و اجراي فرايند توليد با استفاده از روباتها و بينايي ماشيني.
علاوه بر آن، بسياري از فعاليتهاي صنعتي و نيز آزمايش هاي شيميايي و اتمي كه براي انسان مضر و در مواردي غير ممكن است، را مي توان با استفاده از دانش بينايي ماشيني كه مبتني بر پردازش تصوير است ، انجام داد.
1.2 تاريخچه
علاقه به روش هاي پردازش تصوير رقمي از دو محدوده كاربردي اصلي نشأت مي گيرد كه آن محدوده ها عبارتند از :بهبود اطلاعات تصويري ، به منظور تعبير انساني، و پردازش داده هاي صحنه براي ادراك ماشيني مستقل.
يكي از اولين كاربردهاي فنون پردازش تصوير در دسته اول،بهبود عكس هاي رقمي شده روزنامه بود كه از طريق كابل زير دريايي بين لندن و نيويورك منتقل مي شد.
استفاده از سامانه كابلي انتقال عكس Bartlane در ابتداي دهة 1920 ،زمان نياز براي انتقال يك عكس از عرض درياي آتلانتيك را از بيشتر از يك هفته، به كمتر از سه ساعت كاهش داد.
تجهيزات مخصوصي عكس ها را براي انتقال كابلي به صورت رمز در آورده و سپس آنها را در محل دريافت بازسازي مي كردند. شكل 1 . 1 به اين روش انتقال يافت و در يك چاپگر تلگراف كه الگوي نيم تن را شبيه سازي مي كرد، باز سازي شد.
بعضي از مشكلات اوليه در مورد بهبود كيفيت ديداري اين تصاوير اوليه، با انتخاب شيوه هاي چاپ و توزيع سطوح روشنايي مرتبط بود.
روش چاپ مورد استفاده در شكل 1. 1تا پایان سال 1921 با روش دیگری مبتنی بر تجدید چاپ عکس با استفاده از نوار های سوراخ شده در پایان تلگراف بود ، جایگزین شد .شکل 2.1 یک تصویر حاصل از این را نشان می دهد .
بهبود هم نسبت به شکل 1.1 هم در كيفيت «تني» و هم در تفكيك، آشكار است.
سامانه هاي اوليه Bartlane قادر به رمزنگاري تصوير با 5 سطح روشنايي متفاوت بود.
اين توانايي در سال 1929م.به 15 سطح افزايش يافت.
شكل 1 3 نوع تصويري را كه مي توان با استفاده از يك وسيله 15 رنگ بدست آورد،نشان مي دهد.
در خلال اين مدت، اختراع سامانه ظهور صفحه فيلم با استفاده از پرتو هاي نوري مدوله شده با نوار عكس رمز شده،به مقدار زيادي فرآيند تجديد چاپ را بهبود داد.
در طي 35 سال بعد، روش هاي پردازش عكس هاي رقمي انتقال يافته،بهبود يافت.
با اين حال توجه به مفاهيم پردازش تصوير تا زمان اختراع رايانه هاي بزرگ رقمي و كاربرد آنها در برنامه هاي فضايي به تأخير افتاد.
در سال 1964 در(Pasadena,California) Laboratory Laboratory Jet كار روي استفاده از فنون رايانه اي براي بهبود تصاوير ارسالي كاوشگر فضاي شروع شد.
در آن هنگام عكس هاي ماه ارسالي از Ranger به وسيله رايانه پردازش مي شد تا انواع گوناگون اعو جاج تصوير ،ناشي از دوربين تلويزيوني كاوشگر را تصحيح كند.
اين فنون به عنوان مبناي روش هاي بهبود يافته ارتقا و بازيابي تصاوير حاصل از مأموريت هاي Surveyor به ماه، مجموعه مأموريت هاي Mariner به مريخ،پروازهاي سرنشين دار Apollo به ماه و غير به كار رفت.
از سال 1964 تا كنون، موضوع پردازش تصوير، رشد فراواني كرده است.
علاوه بر برنامه تحقيقات فضايي، اكنون از فنون پردازش تصوير، در موارد متعددي استفاده مي شود.
گر چه اغلب اين مسائل با هم نامرتبط هستند، اما عموما نيازمند روش هايي هستند كه قادر به ارتقاي اطلاعات تصويري براي تعبير و تحليل انسان باشد.
براي نمونه در پزشكي شيوه هاي رايانه اي متمايز تصوير را ارتقا مي دهند يا اين كه براي تعبير آسانتر تصاوير اشعه ايكس يا ساير تصاوير پزشكي، سطوح شدت روشنايي را با رنگ ، رمز مي كنند.
متخصصان جغرافي نيز از اين روش ها يا روشهاي مشابه براي مطالعه الگوهاي آلودگي هوا كه با تصوير برداري هوايي و ماهواره اي بدست آمده است، استفاده مي كنند.
روش هاي ارتقا و بازيابي تصوير براي پردازش تصاوير آسيب ديده اشياي غير قابل بازيافت يا تصاوير آزمايش هايي كه تكرار آنها بسيار پرهزينه است، به كار مي روند.
در باستان شناسي نيز روش هاي پردازش تصوير براي بازيابي عكس هاي مات شده اي كه تنها باقي مانده آثار هنري نادر هستند، مورد استفاده قرار مي گيرد.
در فيزيك و زمينه هاي مرتبط ، فنون رايانه اي بارها تصاوير آزمايش هاي مربوط به موضوعاتي نظير پلاسماهاي پر انرژي و تصاوير ريزبيني الكتروني را ارتقا داده اند.
كاربردهاي موفق ديگري از پردازش تصوير را نيز مي توان در نجوم ، زيست شناسي ، پزشكي هسته اي ، اجراي قانون، دفاع و صنعت بيان كرد.
شكل 4.1 چند نوعي از نتايج قابل حصول با فنون پردازش تصوير رقمي را نشان مي دهد.
تصاوير اوليه در سمت چپ و تصاوير پردازش شده متناظر آنها در سمت راست است.
شكل 4.1 (الف)تصوير يك سلول است كه نويزدار را، كه روش متداولي براي كاهش نويز است نشان مي دهد.
شكل 4.1 (پ)عكسي از سطح مريخ است كه تداخل ، آن را در طي انتقال از كاوشگر فضاي به زمين خراب كرده است.
همان طور كه شكل 4.1(ت) نشان مي دهد،تداخل را ، كه در اين حالت به صورت مجموعه اي از خطوط عمومي مشخص است،مي توان تقريبا به طور كامل با پردازش رايانه اي بر طرف كرد.
اشكال 4.1(پ) و (ج) بهبود ممكن را روي تصوير اشعه ايكس به وسيله ارتقاي تمايز و لبه نشان مي دهد.
تصوير شكل 4.1(چ) در خلال نور خوردگي به وسيله حركت يكنواخت مات شد، و تصوير شكل 4.1(ح) پس از اجراي الگوريتم مات زدايي به دست آمد.
اين مثالها نتايج پردازشي را نشان مي دهد كه براي بهبود تعبير و دريافت انساني اجرا شد.
از موارد مهم ديگر در كاربرد فنون پردازش رقمي كه در ابتداي اين بخش ذكر شد،حل مسائل مربوط به درك ماشيني است.
در اين مورد، شيوه هاي استخراج اطلاعات از تصوير به طوري كه براي پردازش رايانه اي مناسب باشد، مورد توجه قرار مي گيرد.
غالبا اين اطلاعات ، به ويژگي هاي ديداري كه انسانها براي تعبير محتواي تصوير استفاده مي كنند، شباهت كمي دارند.
مثالهاي از نوع اطلاعات مورد استفاده در ادراك ماشيني عبارتند از: گشتاورهاي آماري،ضرايب تبديل فوريه و سنجه هاي فاصله چند بعدي.
مسائل نوعي در ادراك ماشيني كه به طور مكرر از فنون پردازش تصوير بهره مي گيرند، عبارتند از: تشخيص خود كار نويسه، بينايي ماشيني براي ساخت و وارسي توليدات صنعتي،تشخيص نظامي ، پردازش خود كار اثر انگشتها، نمايش تصاوير اشعه ايكس و نمونه هاي خوبي، و پردازش ماشيني تصاوير هوايي و ماهواره اي براي پيش بيني هاي هواشناسي و ارزيابي محصولات كشاورزي.
1.3 نمايش تصوير رقمی
عبارت تصوير تك رنگ يا به طور ساده،تصوير به يك تابع شدت روشنايي دو بعدي (x,y)f اشاره مي كند، كه xوy بيانگر مختصات مكاني است و مقدار f در هر نقطه(x,y)متناسب با روشنايي(يا سطح خاكستري) تصوير در آن نقطه است.
گاهي ديدن تصوير به شكل پرسپكتيو كه محور سوم آن روشنايي باشد، مفيد است.
اگر شكل 5.1 به اين طريق ديده شود، به صورت مجموعه اي از قله هاي تيز در نواحي داراي تغييرات متعدد روشنايي، و نواحي هموارتر يا ثابت در جاهاي كه سطح روشنايي تغييرات كمي دارد با ثابت است،ديده مي شود.
استفاده از قرار داد انتساب مقادير نسبتا بزرگتر به نواحي روشن تر، بلندي اجزاي شكل را با روشنايي آن اجزا در تصوير متناسب مي سازد.
تصوير رقمي ، يك تابع تصوير (x,y) fاست كه هم در مختصات مكاني و هم در روشنايي گسسته شده باشد.
تصوير رقمي را مي توان ماتريسي دو بعدي در نظر گرفت كه هر زوج از انديس هاي سطري و ستوني آن يك نقطة تصوير را مشخص مي كند.
عناصر چنين آرايه رقمي را عناصر تصوير ، عناصر عكس، پيكسلها يا پلها مي خوانند كه دو نام آخر مخفف هاي متداول براي «عناصر عكس» است.
1.4 مراحل اساسی پردازش تصوير
در اين مبحث مراحل اساسي مورد نياز براي اجراي يك پردازش بر تصوير را شرح مي دهيم.
براي روشن ساختن موضوع اين بخش،از يك مثال پايه اي استفاده مي كنيم.
يك كاربرد كه فهم آن بدون اطلاع قبلي از مفاهيم تصوير برداري نيز نسبتاً آسان است، استفاده از روش هاي پردازش تصوير براي خواندن آدرس روي بسته هاي پستي مي باشد.
هدف كلي اين فرآيند به دست آوردن خروجي ها از حوزة مسأله به وسيله پردازش تصوير است. حوزة مسأله در اين مثال ،بسته هاي پستي، و هدف خواندن آدرس روي هر بسته است بنابراين خروجي مطلوب در اينجا، رشته اي از نويسه هاي حرفي- عددي است.
مرحله اول اين فرآيند، تصوير برداري- يعني به دست آوردن تصوير رقمي- است.
انجام دادن چنين كاري نيازمند يك حسگر تصوير بردار و قابليت رقمي سازي سيگنال خروجي حسگر مي باشد.
حسگر ممكن است يك دوربين تلويزيوني تك رنگ يا رنگي باشد كه در هر ثانيه تصوير كاملي از حوزة مسأله توليد مي كند.
همچنين حسگر تصوير بردار ممكن است يك دوربين پيمايشگر خطي باشد كه در هر پيمايش يك خط تصوير را مرور مي كند.
در اين حالت با حركت شيي ء از مقابل پيمايشگر خطي يك تصوير دو بعدي توليد مي شود.
اگر در ابتدا خروجي دوربين با ساير حسگرهاي تصوير بردار به شكل رقمي نباشد، يك مبدل «آنالوگ به رقمي» آن را رقمي مي كند.
ماهيت حسگر و تصويري كه توليد مي كند، به نوع كاربرد بستگي دارد.
بنابراين طبق اين مثال، خواندن آدرس بسته هاي پستي اغلب با استفاده از دوربينهاي پيمايشگر خطي انجام مي شود.
پس از اينكه تصوير رقمي به دست آمد، مرحله بعدي پيش پردازش آن است.
وظيفه اصلي پيش پردازش،بهبود تصوير به روش هايي است كه امكان توفيق ساير پردازشها را نيز افزايش دهد.
در اين مثال، پيش پردازش، به طور معمول به روش هايي براي ارتقاي تمايز، حذف نویز و جداسازي آن نواحي كه زمينه شان نشان دهنده احتمال وجود اطلاعات حرفي- عددي است، مي پردازد.
مرحله بعدي به بخش بندي مي پردازد.
در تعريف وسيع، بخش بندي فرآيندي است كه تصوير ورودي را به قسمت ها يا اجزاي تشكيل دهنده اش تقسيم مي كند.
به طور كلي بخش بندي يكي از مشكل ترين كارها در پردازش تصوير رقمي است.
از طرفي، يك شيوه قوي بخش بندي ،تا حد زيادي فرآيند را به حل موفق مسأله مورد نظر نزديك مي كند.
از طرف ديگر تاالگوريتم هاي ضعيف يا خطادار بخش بندي، تقريبا هميشه باعث خرابي اتفاقي مي شوند.
در تشخيص نويسه، نقش اصلي بخش بندي، استخراج نويسه ها و كلمات مجزا از متن است.
خروجي مرحله بخش بندي معمولا، داده هاي پيكسلي خام است كه يا مرز يك ناحيه يا تمام نقاط درون آن ناحيه را تشكيل مي دهند.
در هر دو حالت بايد داده ها را به شكل مناسب براي پردازش رايانه اي تبديل نمود.
اولين تصميمي كه بايد گرفته شود اين است كه آيا داده ها بايد به صورت مرز يا به صورت يك ناحيه كامل نمايش داده شود.
نمايش مرزي وقتي مفيد است كه مشخصات خارجي شكل نظير گوشه ها يا خميدگي مورد نظر باشد.
نمايش ناحيه اي وقتي مفيد است كه خواص دروني بخش هاي تصوير نظير بافت يا استخوان بندي شكل مورد توجه باشد.
در هر حال در بعضي كاربردها هر دو نمايش به كار مي رود.
اين وضعيت در كاربردهاي تشخيص نويسه كه اغلب نيازمند الگوريتم هايي براساس شكل مرز و نيز شكل استخوان بندي و ساير خواص دروني هستند، رخ مي دهد.
انتخاب يك روش نمايش تنها قسمتي از راه تبديل داده هاي خام به شكل مناسب براي پردازش بعدي رايانه اي است. روشي نيز بايد براي توصيف داده ها تعيين شود به طوري كه ويژگي هاي مورد علاقه برجسته شوند.
توصيف،كه انتخاب ويژگي نيز خوانده مي شود.
به استخراج ويژگي هايي كه مقداري از اطلاعات كمي مورد نظر را به ما مي دهند يا براي تشخيص گروهي از اشيا از گروه ديگر، اساسي هستند، مي پردازد.
از نظر تشخيص نويسه توصيف گرمايي نظير حفره ها(سوراخها) و شكافها ويژگي هاي مهمي است كه كمك مي كند تا بعضي حروف را از ساير آنها تشخيص دهيم.
مرحلة آخر شامل تشخيص و تعبير است.
تشخيص فرآيندي است كه براساس اطلاعات حاصل از توصيف گرما يك برچسب را به يك شيئ منتسب مي كند.
تعبير شامل انتساب معنا به يك مجموعه از اشياي تشخيص داده شده است.
از نظر مثال كاربردي اخير، شناسايي يك نويسه،مثلا به عنوان C، نيازمند مربوط نمودن توصيف گرماي آن نويسه با برچسب C است .
فرآيند تعبير مي خواهد به هر مجموعه از چيزهاي برچسب خورده معناي را مرتبط كند.
مثلا يك رشته پنج عددي- يا پنج عدد، يك خط و چهار عدد ديگر- را مي توان به عنوان يك شناسة پستي تعبير كرد.
تاكنون مطلبي دربارة نياز به دانش قبلي يا در مورد تعامل بين پايگاه دانش و واحدهاي پردازش موجود نگفته ايم.
دانش دربارة حوزة مسأله به شكل پايگاه داده دانش در درون سامانه پردازش تصوير،ذخيره مي شود.
اين دانش ممكن است،تنها دانستن محل نواحي داراي جزئيات مورد علاقه باشد. بنابراين جستجوي مورد نياز براي آن اطلاعات محدود مي شود.
پايگاه دانش ممكن است كاملا پيچيده باشد، نظير فهرست به هم مرتبط تمام نقايص اصلي ممكن در يك مسأله بازرسي مواد يا يك پايگاه داده تصويري كه حاوي تصاوير ماهواره اي تفكيك بالا از يك منطقه در ارتباط با كاربردهاي آشكار سازي تغيير باشد.
پايگاه دانش علاوه بر هدايت عمل هر واحد پردازش، بر تعامل بين واحدها نيز نظارت مي كند.
مثلا براي اين كه ماشين نتيجه بگيرد كه رشته اي از نويسه ها يك شناسة پستي است، بايد دانشي به سامانه داده شود كه بتواند محل اين رشته را نسبت به ساير اجزاي ميدان آدرس تشخيص دهد.
اين پايگاه دانش نه تنها عمل هر واحد را هدايت مي كند، بلكه به عمليات باز خورد بين واحد ها نيز كمك مي كند.
براي نمونه ، رشته اي از اعداد در محل صحيح اما داراي تنها چهار نويسه(كه يكي از آنها را نمي توان تشخيص داد) ممكن است باعث شود كه واحد تعبير در مورد اتصال دونويسه شك كند.
تقاضاي بازخورد از طريق پايگاه دانش به طبقه بخش بندي براي «نگاه»مجدد مثالي از كاربرد دانش در پردازش تصوير است.
گر چه اكنون نمايش تصوير را مبسوط شرح نمي دهيم، اما بايد بدانيم كه نتايج پردازش تصوير ممكن است در خروجي هر يك از مراحل نظاره شوند.
همچنين ياد آور مي شويم كه تمام كاربردهاي پردازش تصوير به تعامل هاي پيچيده بالا نياز ندارند، كاربردهاي عملي متعددي به وسيله توابعي كه در مسير بيروني توضیحات بالا فراهم شده است،انجام مي شود.
در بعضي موارد، حتي هيچ يك از آن واحدها نياز نيستند.
مثلا ارتقاي تصوير براي تعبير ديداري انساني بندرت از مرحله پيش پردازش فراتر مي رود .
به طور كلي كارهاي پردازشي كه شامل تشخيص و تعبير است، به كاربردهاي از تحليل تصوير مربوط مي شوند كه در آنها هدف استخراج خودكار يا حتي نيمه خودكار اطلاعات از تصوير است.
1.5 عناصر سامانه های پردازش تصوير رقمی
عناصر يك سامانه همه منظوره كه قادر به انجام دادن اعمال پردازش تصوير مشروح می باشد از اين نوع سامانه معمولا براي اعمال(1) تصوير برداري(2)ذخيره سازي(3) پردازش(4) ارتباطات و(5)نمايش تصوير استفاده مي شود.
1.5.1 تصویر برداری
دو عامل براي به دست آوردن تصاوير رقمي مورد نياز است:يك وسيله فيزيكي كه حساس به نواري در طيف انرژي الكترومغناطيسي (نظير نوارهاي اشعه ايكس،ماورابنفش، مرئي يا مادون قرمز)باشد و يك سيگنال الكتريكي خروجي متناسب با سطح انرژي احساس شده توليد كند،و يك رقمي ساز،وسيله اي كه براي تبديل خروج الكتريكي حسگر به شكل رقمي است.
به عنوان مثال اصول سامانه هاي تصوير برداري اشعه ايكس را در نظر آوريد.
خروجي منبع اشعه ايكس روي شيئ انداخته مي شود و يك رسانه حساس به اشعه ايكس در طرف ديگر شيئ قرار مي گيرد.
اين رسانه، تصويري از بدن(نظير استخوانها و اعضاي بدن)كه با درجات مختلفي اشعه ايكس را جذب مي كنند، ارائه مي كند.
رسانه مورد استفاده،ممكن است يا فيلم، يا دوربين تلويزيوني همراه با مبدل اشعه ايكس به فوتون،يا آشكار سازان گسسته كه به تركيب خروجي هايشان تصويري رقمي بازسازي مي شود، باشد.
دسته اصلي ديگري از حسگرها با نور مرئي و مادون قرمز كار مي كند.
چند تا از وسايلي كه بيش از موارد ديگر براي اين منظور استفاده شده عبارت است از:ريز چگالي سنج ها،تشريح كننده هاي تصوير،دوربينهاي ويديكون، و آرايه هاي حالت جامد حساس به نور.
در اولين وسيله تصويري كه بايد رقمي شود لازم است شفاف (نظير فيلم منفي)يا عكس باشد.
دوربين هاي ويديكون و آرايه هاي حالت جامد مي تواند تصاوير ضبط شده با اين روش را دريافت كند، و همچنين مي تواند تصاوير طبيعي كه شدت نور كافي براي تحريك آشكار ساز داشته باشد را رقمي كند.
در ريز چگالي سنج ها، ورق شفاف يا فيلم روي يك سطح صاف قرار مي گيرد يا اين كه حول يك استوانه پيچيده مي شود.
پيمايش با تمركز يك پرتو نوري(مانند ليزر)روي فيلم و حركت دادن سطح زيرين يا چرخاندن استوانه نسبت به آن پرتو انجام مي شود.
در مورد ورقهاي شفاف ،پرتو از ميان فيلم عبور مي كند و در عكس ها از سطح تصوير منعكس مي شود.
در هر دو مورد، اشعه روي يك آشكار ساز نوري متمركز مي شود و سطح خاكستري هر نقطه تصوير براساس شدت پرتو به وسيله آشكار ساز ضبط مي شود.
اگر تنها مقادير گسسته شدت و محل نقاط تصوير براساس شدت پرتو به وسيله آشكار ساز ضبط مي شود.
اگر تنها مقادير گسسته شدت و محل نقاط تصوير در خروجي مجاز باشد، تصويري رقمي به دست مي آيد.
گر چه ريز چگالي سنج ها وسايل كندي است، بر اثر طبيعت ذاتا پيوستة حركت مكانيكي مورد استفاده در فرآيند رقمي سازي ،قادر است به درجات بالايي از دقت مكاني دست يابد.
كار دوربينهاي ويديكون براساس اصل نور رسانايي(رسانش بر اثر نور) است.
تصويري كه روي سطح لامپ متمركز مي شود، الگويي با رسانايي متغير توليد مي كند كه با توزيع روشنايي تصوير مطابقت دارد.
يك اشعه الكتروني مستقل كاملا متمركز سطح پشت هدف نور رسانا را پيمايش مي كند تا با خنثي سازي بار الكتريكي هر نقطة آن ، سيگنال ولتاژي متناسب با روشنايي آن نقطة تصوير در جمع كننده توليد كند.
با چندي سازي سيگنال حاصل و محل پرتو پيمايشگر، تصويري رقمي بدست مي آيد.
آرايه هاي حالت جامد از عناصر تصوير بردار گسسته سيليكوني با نام فوتوسايت تشكيل مي شود كه ولتاژ خروجي آنها متناسب با شدت نور دريافتي است.
آرايه هاي حالت جامد در يكي از اين دو آرايش هندسي زير مرتب مي شوند:حسگرهاتي پيمايشگر خطي و حسگرهاي ناحيه اي .
حسگر پيمايشگر خطي داراي يک رديف فوتوسايت است كه با حركت نسبي صحنه و فوتوسايتها، تصويري دو بعدي توليد مي كند.
مثلا حسگرهاي پيمايشگر خطي به زيادي در پيمايشگرهاي تخت تصوير به كار مي روند.
يك حسگر ناحيه اي متشكل از ماتريسي از فوتوسايت ها است و بنابراين مي تواند به همان روش لامپ ويديكون تصوير برداري كند.
مزيت مهم حسگرهاي آرايه اي حالت جامد اين است كه مي توان آنها را با سرعت هاي خيلي بالا (مثلا يك بار در هر ثانيه)باز و بسته كرد.
اين مزيت ،آنها را براي كاربردهايي كه بايد تصوير بدون حركت باشد ،مطلوب مي سازد.
فنآوري مورد استفاده در حسگرهاي تصوير بردار حالت جامد از فناوري وسايل ترويج بار(سي سي دي)گرفته شده است.
حسگر سي سي دي پيمايشگر خطي نوعي داراي اين اجزا است: يك رديف از فوتوسايت ها، دو دريچه انتقال براي انتقال زمان بندي شده محتويات عناصر تصويربردار به درون ثبات هاي حمل، و يك دريچه خروجي براي حمل زمان بندي شده محتويات ثبات هاي حمل به درون تقويت كننده.
در خروجي تقويت كننده سيگنال ولتاژي متناسب با محتويات رديف فوتوسايت ها توليد مي شود.
آرايه هاي سي سي دي شبيه به حسگرهاي پيمايشگر خطي است، جز اين كه در سي سي دي فوتوسايت ها در قالب ماتريسي مرتب مي شود و تركيبي از دريچه و ثبات حمل ستونهاي فوتوسايت را از هم جدا مي كند.
محتويات فوتوسايت هاي با شماره فرد به ترتيب وارد ثباتهاي حمل عمودي و سپس وارد ثبات حمل افقي مي شود.
محتواي اين ثبات نيز به تقويت كننده اي كه خروجيش خطي از تصوير است، وارد مي شود.
تكرار اين روند براي خطوط با شماره زوج، ميدان دوم يك قاب تصوير تلويزيوني در هم بافته را توليد مي كند؛ عمل پيمايش 30 بار در ثانيه تكرار مي شود.
حسگرهاي پيمايشگر خطي با تفكيك هايي بين 256 تا 4096 عنصر متداول است.
تفكيك حسگرهاي ناحيه اي از 32 *32 عنصر در كمترين تفكيك تا 256*256 عنصر براي يك حسگر با تفكيك متوسط تغيير مي كند.
وسايل با تفكيك بالاتر 480 *640 عنصري به آساني در دسترس است، و حسگرهاي با تفكيك 1240 *1280 عنصر نيز به طور تجاري در قيمتهاي نسبتاً بالا اما غالباً تعديل پذير در دسترس مي باشد.
حسگرهاي ويژه با بالاترين تفكيك كه براي دستيابي به تفكيك هايي از مرتبه 2048*2048 عنصر از حركت مكانيكي يك تراشه سي سي دي استفاده مي كند، نيز با قيمت هاي بالا قابل دسترسي است.
آرايه هاي سي سي دي معمولاً در دوربين هاي تلويزيوني مورد استفاده قرار مي گيرد.
همانطور كه قبلاً ذكر شد، با دادن سيگنال خروجي اين دوربين ها به رقمي ساز، تصوير رقمي توليد مي شود.
1.5.2 ذخيره سازي
يك تصوير 8 بيتي با ابعاد 1024*1024 پيكسل نيازمند يك ميليون بابت حافظه است.
بنابراين فراهم كردن حافظه كافي معمولاً يكي از مشكلات سامانه هاي پردازش تصوير است.
حافظه هاي رقمي در كارهاي پردازش تصوير به سه گروه اصلي تقسيم مي شود:
1) حافظه كوتاه مدت براي استفاده در زمان پردازش
2) حافظه در حال كار براي بازخواني نسبتاً سريع
3) حافظه بايگاني كه از مشخصات آن فركانس دستيابي كم است.
مقدار حافظه برحسب بايت(8 بيت)، كيلوبايت( يك هزار بايت)، مگابايت( يك ميليون بايت)، گيگابايت(يك ميليارد بايت)، و ترابايت(يك تريليون بايت) سنجيده مي شود.
1.5.3 پردازش
در پردازش تصاوير رقمي، معمولاً از شيوه هايي كه به شكل الگوريتم بيان مي شود، استفاده مي گردد.
بنابراين غير از تصويربرداري و نمايش تصوير، مي توان اغلب عمليات پردازش تصوير را با نرم افزار اجرا كرد.
تنها علت استفاده از سخت افزار ويژه پردازش تصوير، نياز به سرعت بالا در بعضي كاربردها و يا غلبه بر بعضي محدوديت هاي اساسي رايانه است.
مثلاً يك كاربرد مهم از تصوير برداري رقمي، ريزبيني در نور كم است.
براي كاهش نويز تصوير بايد چند متوسط گيري روي تصاوير متوالي با نرخ قاب(غالباً 30 قاب در ثانيه) انجام شود.
سخت افزار اصلي تصويربرداري كه به اين رايانه ها افزوده مي شود، تركيبي از يك«رقمي ساز و بافرقاب» براي رقمي سازي و ذخيره موقت تصوير، يك«واحد محاسبه و منطق» (ALU) براي اجراي عمليات حسابي و منطقي در نرخ قاب و يك يا چند«بافرقاب» براي دستيابي سريع به داده هاي تصوير در طول پردازش است.
امروزه مي توان نرم افزارهاي پردازش تصوير پايه اي زيادي را در بازار تهيه كرد.
وقتي اين نرم افزارها با ساير نرم افزارهاي كاربردي نظير صفحات گسترده و گرافيك تركيب شود، نقطه شروع خوبي براي حل مسائل خاصي از پردازش تصوير فراهم مي شود.
وسايل نمايش و نرم افزارهاي كارآمد پردازش كلمه و توليد گزارش، ارائه نتايج را تسهيل مي كند.
اغلب نتايج به دست آمده با چنين سامانه هايي به بردهاي پردازش تصوير سريع و خاصي كه با بزرگراه مورد استفاده سازگارند، انتقال مي يابد.
يكي از مشخصه هاي علم پردازش تصوير، عدم استفاده از يك راه حل براي كاربردهاي متفاوت است.
بنابراين فنوني كه در يك مورد خوب كار مي كنند، ممكن است در ديگري كاملاً ضعيف باشند.
تنها فايده وجود سخت افزار قوي و نرم افزار پايه در حال حاضر اين است كه نقطة شروع كار نسبت به يك دهه پيش بسيار پيشرفته تر(و به ازاي صرفاً كسري از هزينة آن موقع) مي باشد.
به طور كلي هنوز هم پيدا كردن راه حل واقعي براي يك مسأله خاص نيازمند تحقيق و توسعه فراوان است.
1.5.4 مخابرات
استفاده از مخابرات در پردازش تصوير رقمي معمولاً در مورد ارسال داده ي تصويري است و اغلب شامل مخابره محلي بين سامانه هاي پردازش تصوير و مخابره راه دور از يك نقطه به نقطه ديگر مي باشد.
براي اغلب رايانه ها، سخت افزار و نرم افزار مخابره محلي به آساني در دسترس است.
اگر داده هاي تصويري فشرده نشده در فواصل طولاني مخابره شوند، مشكل جدي تري ايجاد مي شود.
تاكنون بايد اين موضوع روشن شده باشد كه تصاوير رقمي حاوي مقادير بزرگي از داده ها هستند، اما يك خط تلفن صوتي حداكثر مي تواند 9600 بيت بر ثانيه را انتقال دهد؛ بنابراين ارسال يك تصوير 8 بيتي 512*512 با اين نرخ بيت، تقريباً پنج دقيقه طول مي كشد.
ارتباط بيسيم با استفاده از ايستگاه هاي مياني نظير ماهواره ها بسيار سريعتر است، گرچه هزينه بيشتري دارد.
نكته اين است كه در بسياري مواقع، ارسال تصاوير كامل در فواصل مورد نياز است.
كه فشرده سازي وافشرده سازي (انبساط) داده ها نقش اصلي را در حل اين مشكل برعهده دارد.
فصل 2
نرم افزار MATLAB
کسانی که آرزوی موفقیت دارند باید سئولات مقدماتی دقیقی بپرسند.
ارسطو
2.1 آشنايی با محيط MATLAB
با اجرای برنامه MATLAB يک يا چند پنجره روی صفحه نمايش شما ظاهر می شود.
يکی از اين پنجره ها، که عنوان آن MATLAB می باشد،پنجره محيط کار MATLAB ناميده می شود اين پنجره رابط اصلی و اوليه گرافيکی کاربر در MATLAB می باشددر داخل پنجره MATLAB ، پنجره ای به نام پنجره Command وجود دارد .
اين پنجره اولين مکانی است که از طریق آن با MATLAB ارتباط برقرار می کنيد.
علامت << در پنجره Command نمايش داده شده و هنگامی که پنجره Command فعال باشد ، مکان نمايی در سمت راست آن چشمک می زند.
اين علامت مکان نما و خط فرمان MATLAB بيان گر اين امر است که MATLAB آماده اجرای يک عملگر رياضی است.
2.2 فضای کاری MATLAB
همان طور که درپنجره MATLAB کار می کنيد، MATLAB دستوراتی را که وارد می کنيد،را به همراه متغیرهای ایجاد شده ،به خاطر می آورد.
اين دستورات ومتغيرها در فضای کاری MATLAB قرار می گيرند و در صورت نياز می توانيد آنها را فراخوانی کنید.
به عنوان مثال ، برای کنترل مقدار tape، باید نام آن را در خط فرمان برنامه تايپ کنيد:
>> tape
tape = 10
چند نکته:
- اگر نام متغير مورد نظر را فراموش کرديد ، می توانيد از MATLAB بخواهيد تا ليستی از متغيرهای موجود را با استفاده از دستورwho به شما نشان دهد .
- برای فراخوانی دستورات قبلی می توانيد ازکليدهای مکان نمای صفحه کليد استفاده کنيد.
- برای اجرای دستورات در خط فرمان می توانيد از کليد Enter استفاده کنيد.
- کليد Esc دستورنوشته شده درخط جاری فرمان راپاک ميکند
2.3 پنجره های MATLAB
پنجره هايی که در MATLAB از آنها استفاده میشود عبارتند از:
1-command
2 – Command History
3 -Lanunch Pad
4-Current Directory
5- Help
6 -Workspace
7- Array Editor
8-Editor/Debugger
خلاصه ای از وظايف مربوط به پنجره ها :
Command: دستورات را برای پردازش به MATLAB ارسال میکند.
Command history: دستوراتی که قبلا درپنجره command اجرا شده اند، را اجرا می کند.
Launch Pad :نموداردرختی دسترسی به ابزارها،demo ها واسناد و مدارک را نشان می دهد.
Current Directory :GUI مورد نياز را برای تغييردايرکتوری و فايل موجود در MATLAB ارائه می دهد
Help : GUI مورد نياز را برای پيدا کردن و نمايش متن راهنما ارائه می دهد
Workspace : GUI مورد نياز را برای نمايش ،فراخوانی وضبط متغيرهای MATLAB ارائه می دهد
Array Editor : GUI مورد نياز را برای تغيير جزئيات و محتويات متغيرهای MATLAB ارائه می دهد
:Editor/Debugger ويرايشگروخطاياب فايل های متنی MATLAB
2.4 استفاده از اِسکريپت M-file
برای حل مسائل می توانيد دستورات خود را در خط فرمان MATLAB در پنجره command ، وارد کنید اگر اعداد دستورات زیاد باشد و یا بخواهید مقدار یک یا چند متغیر را تغییر دهید و یا برخی از دستورات را مجددا اجرا کنید تایپ مجدد دستورات کار مشکلی است .
MATLAB یک راه حلی منطقی برای حل این مشکل ارائه می دهد.
امکاناتی را برای شما فراهم می کند تا با استفاده ازآن دستورات MATLAB را در یک فایل متنی ذخیره کنید،سپس از MATLAB بخواهید تا آن فایل را باز کرده و دستورات داخل آن را اجرا کند، همانند آنکه آنها را در خط فرمان نوشته و اجرا کنید ،به این نوع فایلها ،فایلهای اسکریپت یا M-file گفته می شود .
فصل3
مفاهیم اصلی در پردازش تصویر
و خود را همشکل روزگار نسازید : اما با تجدید افکار خود را تغییر دهید.
Romans
3.1 چند مفهوم پايه
اين مثال چند مفهوم پايه پردازش تصاوير که شامل شده از خواندن و نوشتن عکس ها ، هيستوگرام برابر عکس و بدست آوردن اطلاعات مربوط به یک عکس را معرفي مي کند که طی چند گام بیان شده است.:
گام اول : خواندن و نشان دادن عکس
گام دوم : چک کردن نحوه ظاهر شدن عکس درفضاي کاري
گام سوم : استدلال درجه خاکستري تصوير
گام چهارم: نوشتن عکس در يک فايل ديسک
گام پنجم : بدست آوردن اطلاعاتي درباره عکس
شاید به مطالب زیر نیز علاقه مند باشید:
- راهکار ارائه پیشنهاد تطبیقی بر اساس یادگیری-Q در حراجهای ترکیبی
- سفارش شبیه سازی مقالات درس کنترل توان راکتیو
- شناسایی سیستم غیر خطی ربات بازوی مسطح دو درجه آزادی توسط شبکه عصبی
- طراحی و پیاده سازی OCR دست نویس فارسی با استفاده از عناصر ابتدایی تشکیل دهنده حروف
- پروژه کامپیوتری درس فرایند تصادفی با متلب
3.1.1 خواندن و نشان دادن عکس
پاک کردن فضاي کاري MATLAB از متغيرها و بستن پنچره هاي Figure که باز شده ا ند . که به ترتيب ازاين دستورات استفاده مي شوند: close all , clear
براي خواندن يک عکس از دستور imread استفاده مي شود اين مثال خواندن عکس هاي ساده که در درايو D قرار دارند را نشان مي دهد. و در متغير I ذخيره مي شود:
I = imread(‘ D:\ pout.tif ’)
imread در مثال فوق به فرمت فايل گرافيکي TIFF اشاره مي کند که تابع آن را بعداً مورد بررسي قرار مي دهيم با اين دستور عکس نشان داده نمي شود براي اين امر از دو تابع imshow و imtool استفاده مي شود که در اين مثال از تابع imshow استفاده شده است.
3.1.2 چک کردن نحوه ظاهر شدن عکس درفضاي کاري
براي ديدن داده هايي که توسط تابع imread در فضاي کاري به وجود آمده است مي توان مرورگر فضاي کاري در ميز کار را چک کرد ، مرورگر فضاي کاري اطلاعاتي در مورد همه متغيرهايي که در طول جلسه MATLAB ايجاد شده را نمايش مي دهد .
تابع imread داده هاي عکس را در متغيرI بر مي گرداند. اندازه اين آرايه 240*291 و کلاس آن از نوع unit8 مي باشد .
( Matlab عکس ها را در کلاس Unit16 ,Unit8 و Double مي تواند نمايش دهد)
3.1.3 بالا بردن وضوح عکس
عکس pout.tif وضوح پاييني دارد.براي اينکه شما نور توزيع شده درعکس را ببينيد بايد يک هيستوگرام (نمودارستوني) ايجاد کنيد که اين عمل با صدا زدن تابع imhist به وقوع مي پيوندد.
(حسن صدا زدن تابعimhist با دستور Figure در اين است که هيستوگرام روي پنجره فعلي که عکس I است verwrite نشود يک Figure جديد براي آن ايجاد مي شود. )
Figure, imhist(I)
با توجه به نمودار فوق ملاحضه خواهيد کرد که بازه شدت نسبتا کم پهنا است ، اين پتانسيل در بازه [255 0] پوشانده نشده است و مقدارهاي بالا و پايين گم شده اند براي اينکه وضوح خوبي داشته با شيم از چند روش مي توانيم استقاده کنيم که يکي از اين روش ها صدا زدن تابع histeg است که کار اين تابع اين است که مقدارهاي شدت را بالاتر از بازه کامل منتشر کند که اين پردازش histogram equalization ناميده مي شود.
I2 = histeg ( I2 )
Figure,imshow (I2)
صدا زدن imhist دوباره يک هيستوگرام که برابرعکس I2 ايجاد مي کند که اگر شما مقايسه کنيد اين دو هيستوگرام به اين نتيجه خواهيد رسيد که که هيستوگرام I2 نسبت به هيستوگرام I بيشتر منتشر شده است .
Figure, imhist ( I2 )
3.1.4 نوشتن عکس در يک فايل ديسک
براي اينکه مقدارI2 را به عنوان يک فايل روي ديسک ذخيره کنيد مي توانيد از تابع imwrite استفاده کنيد . اگر پسوند فايل png باشد تابع imwrite عکس را در يک فايل با فرمت قابل حمل و نقل PNG (Portable Network Graphics) مي نويسد،اما از پسوندهاي ديگرهم مي توانيد استفاده کنيد.
3.1.5 بدست آوردن اطلاعاتی در مورد عکس
براي صورت پذيرفتن اين گام ازتابع imfinfo استفاده مي کنيم اين تابع اطلاعاتي درباره عکس در فايل مي دهد به عنوان مثال فرمت، اندازه ، پهنا وارتفاع.
imfinfo(‘pout2.png’)
ans =
Filename: ‘pout2.png’
FileModDate: ’29-Dec-2003 09:34:39′
FileSize: 36938
Format: ‘png’
FormatVersion:[ ]
Width: 240
Height: 291
BitDepth: 8
ColorType: ‘grayscale’
FormatSignature: [137 80 78 71 13 10 26 10]
Colormap:[]
Histogram:[]
InterlaceType: ‘none’
Transparency: ‘none’
SimpleTransparencyData:[]
BackgroundColor:[]
RenderingIntent:[]
XResolution:[]
YResolution:[]
ResolutionUnit: :[]
XOffset:[]
YOffset:[]
فصل4
تصاویر
کلی تفاوت وجود دارد بین اینکه شخص تاریکی را از میان نور ببیند یا روشنی را از میان تاریکی.
دیودد لیندسی
4.1 تصاوير در MATLAB
ساختمان داده اصلی درMATLAB آرایه می باشد.
آرایه یک مجموعه منظم حقیقی یا عناصر پیچیده است ،این شئ طبعاً برای نمایش عکس ها مناسب است.
Matlab بیشتر عکس ها را به عنوان ماتریس دوبعدی ذخیره می کند.
درجایی که هرعنصر ماتریس ، با یک پیکسل منفرد که در عکس نشان داده شده است برابر می باشد .
(پیکسل ناشی شده از عنصر عکس و معمولاً به عنوان یک نقطه منفرد مشخص می شود و روی یک کامپیوتر نمایش داده می شود )
برای مثال یک عکس که از 200 سطر و 300 ستون متفاوت ، ترکیب شده است نقاط رنگی آن در یک ماتریس 200-by-300 ذخیره شده است .
بعضی از عکس ها مثل عکس های واقعی به یک آرایه سه بعدی نیاز دارند اولین سطح بعد سوم شدت قرمز پیکسل و دومین سطح شدت سبز پیکسل و سومین سطح شدت آبی پیکسل را نشان می دهد .
این مجمع کار کردن با عکس ها را درMATLAB همانند کار کردن با هر نوع داده ماتریس تأسیس کرد و باعث شد که اختیارات تام MATLAB را برای کاربردهای پردازش تصاویرفراهم سازد.
برای مثال شما می توانید یک نقطه پیکسل را از ماتریس عکس انتخاب کنید.
Dot = A ( 2 , 5 )
این دستور مقدار سطر2 ستون 5 از عکس A را درمتغیر Dot قرار می دهد.
انواع عکس درجعبه ابزار matlab به این شرح می باشد:
-
-
- عکس های باینری
-
دریک عکس باینری هر پیکسل آن از دو مقدار 0 و یا 1 تشکیل شده است. ( سیاه- سفید) که به عنوان یک آرایه منطقی ذخیره می شود و به Image bilevel معروف است. شکل صفحه بعد این مطلب رانشان می دهد
4.1.2 عکس های شاخص
یک عکس شاخص(index) از یک آرایه به نام X و یک ماتریس colormap که آن را map می نامیم تشکیل شده است .
مقدارهای پیکسل درآرایه شاخص ها، را به سوی یک colormap هدایت می کند.
ماتریس colormap یک آرایه m-by-3 و کلاس آن از نوع double است وشامل مقدارهای اعشاری بین بازه [1 0] می باشد،هرسطر ماتریسmap مشخص کننده رنگ قرمز،آبی و سبزاست که ترکیب این سه رنگ، یک رنگ تک می سازد ، عکس شاخص به عکس رنگ ساختگی (pseudocolor image) نیز شناخته می شود.
رنگ هر پیکسل عکس با بکار بردن مقدار برابر X به عنوان یک شاخص به ماتریس map تعیین می شود .
یک colormap اغلب با یک عکس index ذخیره می شود و زمانی که تابع imread به کاربرده می شود، به طوراتوماتیک با عکس load می شود .
بعد شما عکس را می خوانید.وcolormap به همراه ماتریس عکس به داخل فضای کاری matlab برده می شود و دردومتغیر جدا قرارمی گیرند، شما باید نشان وابستگی را بین عکس و colormap نگه دارید با وجود این شما در بکارگیری colormap پیش فرض نامحدود هستید و می توانید colormap دلخواه خود را انتخاب کنید.
پیوستگی بین ماتریس عکس و colormap بستگی به کلاس ما تریس عکس دارد اگر کلاس از نوع single یا doubleباشد اولین سطرmap از یک شروع می شود ودر غیر صورت اولین سطر map از صفر شروع می شود.
آرایه یک عکس شاخص می تواند کلاس آن از نوع logical, uint8, uint16, single, or double می باشد.
4.1.3 عکس هایGrayscale
عکس Grayscale ( متمایزکننده رنگ های سیاه وسفید) به عنوان ماتریس شدت شناخته می شود و یک ماتریس داده دارد ،I ، مقدارهای I شدت ها را در بازه معینی نشان می دهد.
MATLAB یک عکس Grayscale را به عنوان ماتریس منحصر بفرد ذخیره می کند.
هرعنصر ماتریس متناظر با یک پیکسل عکس است.
کلاس ماتریس می تواند از نوع uint8, uint16, int16, single, double باشد عکس های Grayscale به ندرت با یک colormap ذخیره می شوند و MATLAB برای نمایش آنها یک colormap به کار می برد.
برای یک ماتریس که کلاس آن از نوع Single یا Double است ، یک colormap پیش فرض استفاده می شود، شدت 0 نشان دهنده سیاه و شدت 1 نشان دهنده سفید است.
برای یک ماتریس که نوع آن یکی از سه نوع uint8 ، uint16 ،int16 می باشد شدت intmin(class ( I )) نشان دهنده سیاه و شدت intmax(class ( I )) نشان دهنده سفید است.
شکل صفحه بعد یک عکس Grayscale را که کلاس آن Double است نمایش می دهد
4.1.4 عکس Truecolor (واقعی)
یک عکس واقعی که به عنوان RGB شناخته می شود .
MATLAB عکس های واقعی را به عنوان آرایه m-by-n-3 ذخیره می کند که تعیین رنگ قرمز، سبز و آبی به منظور اجزایی برای هر پیکسل به شمار می آید.
عکس های واقعی نمی توانند از colormap استفاده کنند.
رنگ هرپیکسل با ترکیب شدت رنگ آبی ، سبز و قرمز که در هر پانل رنگ در موقعیت پیکسل ذخیره می شود تعیین می شود .
فرمت های فایل گرافیکی ،عکس های واقعی را به عنوان عکس های 24 بیتی ذخیره می کند هر سه مؤلفه پانل رنگ ( قرمز، سبز و آبی) هر کدام 8 بیت هستند وبازده این پتانسیل 16 میلیون رنگ است.
آرایه یک عکس واقعی می تواند کلاس آن از نوع uint8,uint16,single ویا Double باشد ،اگر آرایه یک عکس RGB کلاس آن از نوع single یا double باشد، هرجزء رنگ مقدارش بین 0 تا 1 است .
مثال: مؤلفه های رنگ یک پیکسل (0،0،0) می باشد به عنوان سیاه ومولفه های رنگ یک پیکسل (1،1،1) می باشد به عنوان سفید است.
سه مؤلفه های رنگ برای هر پیکسل در طول بعد سوم آرایه داده ذخیره می شود.
مثال: رنگ قرمز ، سبز و آبی مولفه های پیکسل (10,5) شکل زیر به ترتیب در RGB(10,5,1) ،RGB(10,5,2) و RGB(10,5,3) ذخیره شده است.
4.1.5 یک نمونه برای درک مفاهیم
برای اینکه، مفهوم جدا کردن پانل های رنگ در یک عکس واقعی روشن شود به این code توجه کنید.
این code نمونه یک عکس ساده را که از سه قسمت قرمز ، سبز و آبی تشکیل شده است را می خواند .
و خروجی آن سه عکس برای پانل های رنگ ( قرمز، سبزو آبی ) به طور جداگانه وهمچنین خود عکس است.
نکته : تابع subplot(m,n,k) برای تقسیم بندی پنجره Figure به کار برده می شود حاصل ضرب m*n تعداد ناحیه های پنجره Figure را مشخص می کند ومقدارk ، شماره ناحیه ای است که عکس مورد نظر در آن قرار می گیرد.
و با استفاده ازتابعtitle(‘ ‘) برای عکس ها عنوان تعریف می کنیم .
در صفحه بعد کد برنامه و اجرای آن را می بینیم :
با توجه به Figureفوق ملاحضه می کنید که درهر پانل رنگ یک قسمت سفید( رنگ سفید برابر است با بالاترین مقدارهای هر رنگ جدا.) و دوقسمت دیگر سیاه است .
به طور مثال در پانل قرمز، قسمت های قرمز سفید و نقاطی که قرمز نیستند سیاه شده است.
4.2 تبديل انوع عکس ها
شما ممکن ، نیاز پیدا کنید که یک عکس از یک نوع را به نوع دیگر تبدیل کنید.
dither | ایجاد یک عکس با ینری از یک عکس grayscale با ترکیب نقطه های رنگارنگ برای رنگ جدید یا ایجاد یک عکس index از یک عکس truecolor با ترکیب نقطه های رنگارنگ برای رنگ جدید |
Gray2ind | ایجاد یک عکس index ازیک عکس grayscale |
grayslice | ایجاد یک عکس index ازیک عکس grayscale با آستانه سازی |
Im2bw | ایجاد یک عکس باینری ازیک عکس grayscale,index ویاعکس truecolor مبنی بر یک آستانه روشنایی |
in2gray | ایجاد یک عکس grayscale ازیک عکس index |
Ind2rgb | ایجاد یک عکس truecolor ازیک عکس index |
Mat2gray | ایجاد یک عکس grayscale ازداده دریک ماتریس با مقیاس گذاری داده |
rgb2gray | ایجاد یک عکسgrayscale ازیک عکسrgb |
rgb2ind | ایجاد یک عکسindex ازیک عکس rgb |
نکته : موقعی که شما یک عکس از یک فرمت را به فرمت دیگر تبدیل می کنید ، عکس نتیجه ممکن است ظاهری متفاوت با عکس original دارد.
برای مثال اگر شما یک عکس index رنگی را به یک عکس Grayscale تبدیل کنید عکس نتیجه Grayscale است و رنگی نیست.
4.3 خواندن عکس گرافيکی
تابع imread هر عکس گرافیکی که فرمت فایل آن قابل پشتیبانی باشد را می خواند.
اکثر فرمت های فایل عکس ، 8 بیت برای ذخیره مقدارهای پیکسل به کار می برند،زمانی که عکس ها خوانده شوند به حافظه می روند وMATLAB کلاس آنها را به عنوان uint8 ذخیره می کند .
برای فرمت های فایل که 16 بیت داده پشتیبانی می کنند مثل PNG,TIFF ،MATLAB کلاس آنها را به عنوان uint16 ذخیره می کند.
نکته :برای عکس index ،imread همیشه colormap را که می خواند در داخل یک ماتریس که کلاس آن double است قرار می دهد.
برای مثال: این کد یک عکس truecolor را می خواند و به داخل فضای کاری MATLAB به عنوان متغیر RGB قرار می دهد.
RGB = imread ( ‘ football.jpg ’ );
این کد یک عکس index را می خواند و به همراه colormap در داخل فضای کاری MATLAB در دو متغیر جداگانه قرار می دهد.
[X,map] = imread(‘trees.tif’);
در این مثال ها imread اشاره به فرمت فایل می کند که به واسطه مضمون فایل به کار برده شده است . همچنین شما می توانید فرمت فایل را به عنوان یک آرگمان ، imread مشخص کنید.
MATLAB بسیاری از فرمت های فایل گرافیکی رایج را پشتیبانی می کند،
که عبارنتد از:
BMP , CUR , GIF , HDF , ICO , JPG OR JPEG
PBM , PCX , PGM,PNG ,PNM , PPM ,RAS , XWD , TIF or TIFF
خواندن عکس های چند گانه از فایل گرافیکی: از میان فرمت های فایل که توسط MATLAB پشتیبانی می شود چندین فرمت فایل که عبارتند ازtiff ,hdf, ico ,gif یا cur می توانند از چند عکس تشکیل شوند .
به طور پیش فرض imread فقط روی اولین عکس ازفایل تأثیرمی گذارد، برای وارد شدن عکس های اضافی ازفایل ، به فضای کاری MATLAB باید از گرامری که فرمت فایل را پشتیبانی می کند استفاده کرد.
برای مثال ، موقعی که شما می خواهید به عکس های فایل tiff دسترسی پیدا کنید از این گرامر استفاده می کنید.
که Idx یک مقدار صحیح است که مشخص می کند، کدام عکس از فایل خوانده شود.
[… ]= Imread ( …, Idx )
در این گرامراگرidx برابر با 3 باشد ، سومین عکس از فایل را می خواند و اگر این آرگمان را مشخص نکنیم طبق گفته های قبلی اولین عکس را می خواند.
4.4 نشان دادن عکس ها
تابع imshow برای نشان دادن عکس ها استفاده می شود ، که البته قبلاً وارد فضای کاری MATLAB شده باشد، یا نمایش یک عکس که در فایل گرافیکی ذخیره شده باشد.
این کد یک عکس را می خواند و به فضای کاری MATLAB می بردو سپس آن را در پنجره Figure نمایش می دهد .
moon = imread(‘moon.tif’);
imshow(moon);
دستور imshow با استفاده از نام فایل:
imshow(‘moon.tif’)
که می تواند برای پیمایش به واسطه عکس مفید باشد.
نکته با وجود این، موقعی که شما این دستور را به کار می برید داده عکس در فضای کاری MATLAB ذخیره نمی شود، برای اینکه عکس وارد فضای کاری MATLAB شود باید از تابع getimage استفاده کرد تا داده عکس دوباره ازاشاره گرجاری شئ عکس گرافیکی (پنجره Figure) بدست آورده شود. برای مثال:
Moon=getimage
که داده عکس از moon.tif به متغیرmoon نسبت داده شده است ،البته اگر پنجره Figure که در صفحه قبل مشاهده کردید فعال باشد.
دستور imshow برای انواع عکس به کاربرده می شود که به طور مختصرطریقه نمایش هر یک از عکس ها توسط تابع imshow را معرفی می کنیم.
-
-
- نمایش عکس های indexed
-
برای نمایش این نوع عکس باید دو پارامتر ماتریس عکس وcolormap را برای imshow مشخص کنیم .
مثال – imashow(X,map)
دراین مثال X نشان دهنده ماتریس عکس در فضای کاری ، map نشان دهنده colormap می باشد.
-
-
- نمایش عکس های grayscale
-
برای نمایش این نوع عکس فقط یک پارامتر، به عنوان ماتریس عکس را برای imshow مشخص کنیم.
مثال – imshow(I)
دراین مثال I نشان دهنده ماتریس عکس درفضای کاری می باشد.
-
-
- نمایش عکس های truecolor
-
برای نمایش این نوع عکس فقط یک پارامتر، به عنوان ماتریس عکس را برای imshow مشخص کنیم.
مثال – imshow ( RGB)
دراین مثال RGB نشان دهنده ماتریس عکس درفضای کاری می باشد.
-
-
- نمایش عکس های Binary
-
برای نمایش این نوع عکس فقط یک پارامتر، به عنوان ماتریس عکس را برای imshow مشخص کنیم.
مثال – imshow (BW)
دراین مثال BW نشان دهنده ماتریس عکس درفضای کاری می باشد.
فصل5
رابطه بین پيکسل ها
قدرت به سمت کسی جذب می شود که برای دست یابی به نتایج مطلوبش از آن به نحو احسن استفاده می کند.
برایان ترسی
5.1 رابطه پايه اي بين پيكسل ها
در اين مبحث چند رابطه اوليه مهم بين پيكسل هاي تصوير رقمي را مطرح مي كنيم.
همان طور كه قبلاً ذكر شد، تصوير با نماد(x,y)f نشان داده مي شود. براي اشاره به يك پيكسل معين از حروف كوچك نظير p و q استفاده مي كنيم.
يك زيرمجموعه از پيكسل هاي (x,y)f با S بيان مي شود.
5.1.1 همسايه هاي يك پيكسل
پيكسل p در مختصات (x,y ) چهار همسايه افقي و عمودي دارد كه مختصات آنها عبارتند از:
(x+1 , y), (x-1, y), (x, y +1) , (x,y-1).
اين مجموعه از پيكسل همسايه هاي چهار گانه p ناميده مي شوند كه با نماد N4(p) نشان داده مي شوند. هر يك از اين پيكسل ها به فاصله يك واحد از (x,y) قرار دارند و اگر (x,y) در مرز تصوير باشد، بعضي از همسايگان p خارج از تصوير رقمي قرار مي گيرند.
( x+1 , y+1) , (x+1, y-1) , (x-1 , y+1) , (x-1 , y-1)
كه با ND(p) نشان داده مي شوند. اين نقاط همراه با همسايگان چهار گانه، همسايه هاي هشتگانه p ناميده مي شوند. N8(p) نشان داده مي شوند. مانند N4(p)، اگر (x,y) روي مرز تصوير باشد، بعضي از نقاط همسايگي هاي ND(p) و N8(p) خارج از تصوير قرار مي گيرند.
5.1.2 برچسب زني اجزاي متصل
پمايش پيكسل به پيكسل تصوير از چپ به راست و از بالا به پايين را در نظر بگيرد و فعلاً فرض كنيد تنها به اجزاي متصل چهارگانه علاقه مند هستيم. اجازه دهيد در هر مرحله از فرآيند پيمايش p بر پيكسل مركزي و r و t و به ترتيب بر همسايگان بالايي و سه چپ آن دلالت كند. طبيعت ترتيبي پيمايش اطمينان مي دهد كه وقتي به p مي رسيم، قبلاً با نقاط r و t مواجه شده ايم( و اگر يك بوده اند، برچسب خورده اند).
با توجه به مفاهيم قبلاً تعيين شده، اجازه دهيد روند زير را بكار گيريم.
اگر مقدار p صفر باشد، بدون هيچ كاري روي محل بعدي پيدايش برويد.
اگر مقدار p يك باشد، r و t را بررسي نماييد.
اگر هر دو صفر هستند، يك برچسب جديد به p نسبت دهيد.
(يعني براساس اطلاعات فعلي حاصل از پيدايش، اين اولين بار است كه به اين جزء پيوسته برخورد كرده ايم) اگر تنها يكي از دوهمسايه فوق 1 باشد، برچسب آن را به p منتسب نماييد.
اگر هر دو يك هستند و برچسب هاي متفاوتي دارند، يكي از اين دو برچسب را به p منتسب كنيد و ياداداشت كنيد كه هر دو برچسب معادل هستند (يعني نقاط r و t از طريق p متصل هستند.)
در انتهاي پيمايش تمام نقاط با مقدار يك برچسب خورده اند، اما بعضي برچسبها ممكن است معادل باشند.
كارهايي كه اكنون بايد انجام داد، به ترتيب عبارتند از: مرتب كردن تمام زوج برچسب هاي معادل در دسته هاي هم ارزي، انتساب برچسب به هر دسته، مرور مجدد تصوير با جايگزيني هر برچسب با برچسب منتسب شده به دسته هم ارزي آن.
برچسب زني اجزاء متصل هشتگانه را نيز به همان طريق انجام مي دهيم، اما دو پيكسل همسايه قطري بالاي p كه با q و s نشان داده مي شوند، نيز بايد بررسي شوند.
طبيعت ترتيبي پيمايش اطمينان مي دهد كه اين همسايه ها قبل از p،پردازش شده اند.
اگر p صفر باشد، به محل بعدي پيمايش برويد.
اگر p يك و تمام چهار همسايه آن صفر باشد، يك برچسب جديد به p منتسب كنيد.
اگر تنها يكي از همسايه ها يك باشد، برچسبش را به p منتسب كنيد.
اگر دو يا چند همسايه يك باشند، يكي از برچسبها را به p منتسب كنيد و هم ارزي هاي مناسب را يادداشت كنيد.
بعد از اتمام پيمايش تصوير زوج برچسب هاي معادل را در دسته هاي هم ارزي مرتب كنيد.
به هر دسته يك برچسب يكتا منتسب كنيد و پيمايش دوم تصوير را انجام دهيد كه در اين پمايش هر برچسب را با برچسب منتسب شده به دستة هم ارزي آن جايگزين كنيد.
فصل6
ارتقای تصویر
تغییرات کنترل شده ،همیشه در مقایسه با تغییرات کنترل نشده
منجر به پیشرفت های بیشتری می شوند.
برایان ترسی
6.1 تجزيه عکس
تکنولوژی ImageAnalyze اطلاعاتی درباره ساختار و یا خصیصه های یک عکس در اختیار ما می گذارد .
در زیر توابعی را مورد بحث قرار می دهیم ٫ که به وسیله آنها می توانیم از این تکنولوژی بهره مند شویم .
- بازیابی لبه ها (Detection Edge)
- ترسیم مرز اشیاء (Tracing Boundaries)
6.1.1 بازیابی لبه ها
در یک عکس (Intensity) ٫ لبه یک منحنی است که یک مسیر را دنبال می کند .
لبه ها اغلب به وسیله مرزهای اشیاء در یک ناحیه ارتباط داده می شوند .
تکنولوژی EdgeDetection برای تشخیص لبه ها در یک عکس به کار می رود.
برای پیدا کردن لبه ها می توانیم از تایع Edge استفاده کنیم ٫ که البته راجع به این تابع بعداً مفصل صحبت خواهیم کرد ٫ اما در این قسمت به شرح مختصری راجع به این تابع می پردازیم .
این تابع به جستجوی مکانی می گردد که شدت (نور ) آن به سرعت تغییر کرده باشد و این کار را توسط یکی از دو معیار زیر انجام می دهد :
- مکانهایی که مشتق اول شدت نور آنها بزرگتر از اندازه آستانه های دیگر باشد .
- مکانهایی که مشتق دوم شدت نور آنها یک محل تقاطع صفر دارد .
تابع Edge یک عکس باینری برمی گرداند ( دارای مقادیر 0 و 1 هستند ) ٫ مکانهایی که در آنها لبه ای یافت شده است دارای عنصر 1 و مکانهایی که در آنها لبه ای یافت نشده است دارای عنصر 0 هستند .
یکی از قوی ترین متدها که برای بازیابی لبه ها توسط تابع Edge ارائه می شود ٫ متد Canny می باشد .
این متد از این نظر با دیگر متدها متفاوت است که برای دو آستانه ی مختلف استفاده می شود ( برای تعیین لبه های ضخیم و نازک ) و فقط لبه های نازکی که به لبه های ضخیم متصل باشند در خروجی برمی گرداند .
این متد برای از بین بردن نویزها زیاد مفید نمی باشد بلکه بیشتر برای تعیین لبه های نازک مورد استفاده قرار می گیرد .
در واقع می توان گفت این متد از دقت بیشتری برای تعیین لبه ها برخوردار است .
با دنبال کردن مثال زیر و با توجه به خروجی بدست آمده از دو متد Cannyو Sobel متوجه توانایی و قدرت متد Canny در پیدا کردن لبه ها می شوید.
- خواندن عکس و نمایش آن .
I = imread(‘coins.png’);
imshow(I) title (‘ Orginal Image ‘);
- به کار بردن دو متد Canny و Sobel روی عکس و نشان دادن خروجی .
BW1 = edge(I,’sobel’);
BW2 = edge(I,’canny’);
imshow(BW1),title(‘With Sobel Method ‘)
figure, imshow(BW2),title(‘With Canny Method ‘)
-
-
- ترسیم مرز اشیاء
-
این ToolBox دارای دو تابع برای پیدا کردن مرز اشیاء در یک عکس باینری می باشد :
Bwtraceboundary
Bwboundaries
-
-
- تابع Bwtraceboundary :
-
این تابع مختصات سطر و ستون تمام پیکسل های روی حاشیه یک شئ در عکس را برمی گرداند و باید مکانی را به عنوان نقطه شروع برای رسم حاشیه تعیین کنیم .
-
-
- تابع Bwboundaries:
-
این تابع مختصات سطر و ستون همه پیکسل های روی حاشیه تمام اشیاء داخل عکس را برمی گرداند .
در فصول بعد این تابع را به طور مفصل توضیح خواهیم داد .
نکته : برای هر دو تابع پیکسل های غیر از صفر در یک عکس باینری به اشیاء تعلق دارند و پیکسل هایی با ارزش صفر پیش زمینه را تشکیل می دهند .
با توجه به مثال زیر مطالب فوق و تفاوت دو تابع ذکر شده را بهتر درک خواهید کرد :
- خواندن عکس و نمایش آن .
I = imread(‘coins.png’);
figure,imshow(I),title (‘ Orginal Image ‘);
- تبدیل عکس به عکس باینری . این دو تابع فقط با عکس های باینری کار می کنند .
BW = im2bw(I);
figure,imshow(BW),title (‘ Binary Image ‘);
- تعیین مختصات سطر و ستون پیکسل های حاشیه شئ ای که می خواهید ترسیم کنید .تابع Bwtraceboundary از این نقطه به عنوان نقطه شروع برای رسم حاشیه استفاده می کند .
dim = size(BW)
col = round(dim(2)/2)-90;
row = min(find(BW(:,col)))
- صدا کردن تابع Bwtraceboundary تا حاشیه را از نقطه مشخص شده رسم کند . این تابع دارای چندین آرگومان می باشد ٫ که آرگومان اول آن عکس باینری ورودی و آرگومان دوم آن به عنوان نقطه شروع برای رسم حاشیه به کار می رود .
boundary = bwtraceboundary(BW,[row, col],’N’);
- نمایش عکس Grayscale اصلی و ترسیم حاشیه یک شئ در عکس توسط مختصات برگردانده شده ار تابع Bwtraceboundary .
figure,imshow(I), title (‘Orginal Image With Bwtraceboundary’);
hold on;
plot(boundary(:,2),boundary(:,1),’g’,’LineWidth’,3);
- برای ترسیم حاشیه تمامی اشیاء موجود در عکس از تابع Bwboundaries استفاده می کنیم . به طور پیش فرض این تابع حاشیه اشیایی را پیدا می کند که دارای اشیایی در داخل خود باشند (اشیاء Parent ) .
در عکس های باینری این تابع نواحی سیاه را به عنوان یک ناحیه جدا در نظر می گیرد . برای اینکه مطمئن شویم این تابع فقط سکه ها را از داخل عکس جدا می کند ٫ توسط تابع Imfill اشیاء موجود در عکس را پر می کنیم.
BW_filled = imfill(BW,’holes’);
boundaries = bwboundaries(BW_filled);
این تابع یک آرایه برمی گرداند که هر سلول از آن شامل مختصات سطر و ستون برای یک شئ در عکس است .
- رسم حاشیه هر شئ در عکس Grayscale با استفاده از مختصاتی که توسط تابع Bwboundaries برگردانده می شود.
figure,imshow(I), title (‘ Orginal Image With Bwboundaries ‘);
hold on;
for k=1:10
b = boundaries{k};
plot(b(:,2),b(:,1),’g’,’LineWidth’,3);
end
6.2 تنظيم شدت
تکنولوژی های بالا برای بهبود عکس(ویا اصلاح عکس) به کار برده می شوند.گاهی اوقات بهبود عکس به صورت قابل مشاهده تعریف می شود(اضافه کردن علامت) وگاهی اوقات به صورت ذهنی (ساختن طرحی آسانتر برای دیدن ، با تغییر رنگ وشدت).
تنظیم شدت یک تکنولوژی بالابرنده عکس است که مقدارهای شدت عکس را، در یک بازه جدید ترسیم می کند. این Figure یک عکس با وضوح پایین با هیستوگرام آنرا نشان می دهد. توجه کنید چگونه همه مقدارهای هیستوگرام عکس در وسط بازه جمع شده اند.
اگر شما مقدارهای شدت را در کل بازه[0-255] پر کنید وضوح عکس بالا می رود. دراینجا چند تکنولوژی تنظیم شدت معرفی می کنیم :
1 . Adjusting Intensity Values to a Specified Range
2 . Histogram Equalization
3 . Contrast-Limited Adaptive Histogram Equalization 4 . Decorrelation Stretching
که ما به شرح اولین تکنولوژی می پردازیم .
6.2.1 تنظیم مقدارهای شدت در یک بازه مشخص
می توانید مقدارهای شدت را در یک عکس با به کارگیری تابع imadjust تنظیم کنید ، درهرجایی که بازه مقدارهای شدت در عکس خروجی را مشخص کنید.
برای مثال ، این کد وضوح عکس را که دارای شفافیت پایین است بالا می برد، که این امر با تغییر نگاشت مقدارهای داده در پرکردن تمام بازه شدت [255- 0] صورت می پذیرد.
I = imread(‘pout.tif’);
J = imadjust(I);
imshow(J)
figure, imhist(J,64)
این Figure عکس تنظیم شده وهیستوگرام آن را نشان می دهد.
نکته: اضافه کردن وضوح در عکس باعث شده که هیستوگرام آن در تمام بازه پر شود.
6.2.2 تعیین حد تنظیم
به طور اختیاری می توانید بازه مقدارهای ورودی و بازه مقدارهای خروجی را برای imadjust مشخص کنید . این بازه ها را، دردو بردار مشخص کرده وآنها رابه عنوان آرگمان های نهایی imadjust پذیرفته اید. بردار اول، مقدار های شدت پایین و بالا که شما در نقشه می خواهید را مشخص می کند و بردار دوم معیاری بالاتر از آنچه که شما در نقشه می خواهید را تعیین می کند.
نکته : باید مقدار شدت را بین صفر تا یک مشخص کنید و از نوع کلاس I صرفه نظر می کنید. اگرI ،uint8 باشد مقدارهای که به عنوان [LOW_IN ; HIGH_IN ] , [ LOW_OUT ; HIGH_OUT] نوشته اید درعدد 255 ضرب می شود و اگر I ، uint16 باشد در عدد 65535 ضرب می شود. |
برای مثال ، می توانید وضوح یک عکس را با محدود کردن بازه داده کم کنید. در این مثال کت مرد بیش از حد سیاه است و جزﺋیات آن معلوم نیست .imadjust بازه 0,51]] درuint8 عکس ورودی و بازه [128,255] عکس خروجی را ترسیم می کند.
روشنایی نسبتاً زیاد عکس و همچنین عریض کردن dynamic، بازه بخش های سیاه عکس original سبب می شود که دیدن قسمت های جزیی در کت آسان تر شود.
نکته : تمام نقاط بالای 51 درعکس original ، در عکس تنظیم شده با مقدار 255( سفید) نگاشته می شوند و عکس تنظیم شده شسته و ساییده شده است.
I = imread ( ‘cameraman.tif’ );
J = imadjust ( I , [0 0.2 ] , [ 0.5 1 ] );
Imshow ( I )
figure, imshow( J )
6.2.3 کار گذاری حدود تنظیم به طور اتوماتیک
برای به کارگیری imadjust ، باید این دو گام را انجام دهید.
گام اول : دیدن هیستوگرام عکس برای اینکه حدود مقدار شدت تعیین شود.
گام دوم: مشخص کردن این حدود به عنوان یک قسمت بین 0 و1 ،که می توانید آنها را برای imadjust در بردار [ low_in high_in ] تأیید کنید.
با یک روش خیلی راحتر می توانیم این حدود را مشخص کنیم، و آن هم استفاده ازتابع stretchlim است . این تابع هیستوگرام یک عکس را مشخص می کند و حدود تنظیم را به طور اتوماتیک تعیین می کند.
تابع stretchlim این مقدارها را به عنوان قسمت هایی در یک بردار بر می گرداند که شما می توانید آنها را به آرگمان [ low_in high_in ] در imadjust تأیید کنید.
برای مثال :
I = imread ( ‘ rice.png ‘ );
J = imadjust ( I , stretchlim ( I ) , [ 0 1 ] );
( تصحیح گاما)gamma Correction
imadjust ، botton به Low و top به high را ترسیم می کند.
به طور پیش فرض مقدارهای بین low و high به طورر خطی به مقدارهای بین botton و top ترسیم شده اند.
برای مثال ، یک مقدار ) halfwayنیمه راه( بین low و high برابر با یک مقدارhalfway ( نیمه راه( بین top و botton می باشد.
Imadjust می تواند یک آرگمان اضافی را قبول کند که فاکتور تصحیح گاما(gamma correction factor) را مشخص کند.
گاما می تواند یک مقدار بین 0 تا بی نهایت باشد.اگرگاما یک باشد(پیش فرض) نگاشت خطی می باشد.
و اگر گاما کمتر از یک باشد، نگاشت وزنی به سمت بالاتر ازمقدارهای خروجی ( روشن تر) دارد واگر گاما بزرگتر از یک باشد نگاشت وزنی به سمت پایین تر ازمقدارهای خروجی ( تیره تر) دارد.
در شکل صفحه بعد این رابطه همراه با مثال روشن شده است .
این سه منحنی تغییرشکل، نشان می دهند چگونه مقدارها، زمانی که گاما کمتراز یک ،مساوی یک و بزگتر از یک است ترسیم می شوند.
( محورx نشان دهنده مقدارهای شدت در عکس ورودی است و محور y نشان دهنده مقدار های شدت در عکس خروجی است .)
نمودارهای کشیده شده سه تفاوت تنظیمات تصحیح گاما را نمایش می دهد.
مثال زیر تصحیح گاما را توضیح می دهد.
نکته اینکه در صدا زدن imadjust ، بازه های داده ورودی و بازه های خروجی به عنوان ماتریس هاس خالی [] مشخص می شوند.
موقعی که یک ماتریس خالی را مشخص می کنید ،imadjust بازه پیش فرض [0 1] را به کار می برد .
در این مثال هر دو بازه خالی می باشند.این بدان معنی است که در تابع imadjust تنها Gamma Correction تأثیر می گذارد.
[X,map] = imread(‘forest.tif’)
I = ind2gray(X,map);
J = imadjust(I,[ ],[ ],0.5);
imshow(I)
figure, imshow(J)
با توجه به اینکه مقدار گاما کمتر از یک است عکس خروجی روشن تر شده است.
6.3 تار زدايی
در MATLAB دو الگوریتم تار زدایی برای برطرف کردن تاری و نویز در تصاویر وجود دارد .
1 . تار زدايي با استفاده از الگوريتم Blind Deconvolution
2. تار زدايي با استفاده از الگوريتم Lucy-Richardson
که ما براي تار زدايي تصاوير از الگوريتم تار زداييBlind Deconvolution استفاده کرده ایم . اين الگوريتم براي تصاويري که اطلاعي در مورد شکل کلي نويز هاي آن و مقدار ماتي آن نداريم استفاده مي شود. تابع deconvblind تصوير و PSF را در مورد تصاوير به صورت يکجا بر مي گرداند.
6.3.1 تابع deconvblind براي مات زدايي از تصاوير
براي توضيح الگوريتم blind deconvolution بهتر است با يک مثال ساده شروع کنيم.
در اين مثال يک تصوير را ابتدا مات مي کنيم سپس توسط تابع deconvblind آنرا مات زدايي مي کنيم.
- مي خواهيم تصوير فوق را خوانده و آنرا مات کنيم و دوباره آنرا باز يابي کنيم.
I=imread(‘cameraman.tif’);
figure; imshow(I); title(‘Original Image’);
– به psf تبديل می کنیم.
PSF = fspecial(‘motion’,13,45);
figure; imshow(PSF,[],’notruesize’); title(‘Original PSF’);
- تار کردن تصوير به صورت دستي
Blurred = imfilter(I,PSF,’circ’,’conv’);
figure; imshow(Blurred); title(‘Blurred Image’);
- تارزدايي از تصوير يک تغيير کوچک در ميزان سايز يک تصوير psf ايجاد مي کند . براي تعيين کردن سايز يک تصوير psf بايد ابتدا طول و لبه ها را در يک تصويرمات شده بدست بياوريم.
شکل هاي زير psf تصوير را بعد از مات کردن تصوير نشان مي دهد.و مي توان کيفيت پايين آنرا ديد.
INITPSF = ones(size(PSF));
[J P]= deconvblind(Blurred,INITPSF,30);
figure; imshow(J); title(‘Restored Image’);
figure; imshow(P,[],’notruesize’);
title(‘Restored PSF’);
اگرچه تابعdeconvblind مي تواند يک تصوير را تارزدائي کند .اما در اين تصوير يک دايره دور لبه هاي نوک تيز رسم شده است که در تصوير بازگشتي رضايت بخش نبوده است.
- در اين جا بايد يک آرايه بزرگ براي محاسبه کردن بيشترين تفاوت رنگ براي عمل تار زدائي ايجاد کنيم.
براي جدا کردن يک پيکسل براي پردازش بايد يک آرايه به سايز يکسان از تصوير اصلي بدست آوريم وبه پيکسل هايي که مانند تصوير اوليه هستند مقدار صفر را بدهيم.(دو آرايه از پيکسل هاي تصوير اوليه و تصوير دوم داريم)
با به وجود آوردن آرايه اي از وزنها ما ترکيبي از لبه ها در پردازش و بيشترين مغايرت در تصوير ها را بدست آورده ايم.براي اينکه تاري تصاوير خطي است .
WEIGHT = edge(I,’sobel’,.28);
se1 = strel(‘disk’,1);
se2 = strel(‘line’,13,45);
WEIGHT = ~imdilate(WEIGHT,[se1 se2]);
WEIGHT = padarray(WEIGHT(2:end-1,2:end-1),[2 2]);
figure; imshow(WEIGHT); title(‘Weight Array’);
– با اجراي دوباره اين قسمت آرايه وزنها دوباره مشخص مي شود و تغيير در psf ايجاد مي کند .
P1 = P;
P1(find(P1 < 0.01))=0;
[J2 P2] = deconvblind(Blurred,P1,50,[],WEIGHT);
figure; imshow(J2);
title(‘Newly Deblurred Image’);
figure; imshow(P2,[],’notruesize’);
title(‘Newly Reconstructed PSF’);
تابع deconvblind با پيش فرض ها ي آن چندين عمل را براي تار زدايي از تصاوير انجام مي دهد. شما مي توانيد پردازش را بعد از تعداد مشخصي از تکرار براي چک کردن نتيجه آن متوقف کنيد ودوباره مراحل رااز محلي که آن را متوقف کرده ايم شروع می کنيم. براي انجام اين کار شما بايد از هر دو روش ايجادآرايه اي از تصوير تار شده وهمچنين آرايه اي از psf تصوير استفاده کنيد.
خروجي تابع deconvblind شامل تصوير خروجي وباز گرداندن psf به صورت آرايه است که هر کدام از سلولهاي آرايه بازگشتي شامل عنصر هاي زير هستند.
عنصر | توضيحات |
Output(1) | تصوير اصلي (ورودي) |
Output(2) | تصوير آخرين بار تکرار الگوريتم |
Output(3) | تصوير بعد از آخرين بار تکرار الگوريتم |
Output(4) | اطلاعاتي داخلي براي تابعdeconvlucy |
خروجي psf هم مانند بالا عناصري مشابه را دارد.
تابع deconvblind آرگومان هاي بسياري دارد که مي توان توسط آنها بهترين نتيجه ممکن را بدست آورد مانند مشخص کردن ميزان تشخيص نويز و تاري در تصاوير.
فصل7
توابع
هرچه را ذهن بتواند تصور و باور کند،
قابل دست یابی است.
ناپلئون هیل
7.1 تابع BwAreaOpen
اشیاء کوچک را از داخل عکس پاک می کند.
Syntax:
-
- bw2=BwAreaOpen(bw1 , P)
- bw2=BwAreaOpen(bw1 , P , CONN)
توضیحات:
عکس باینری bw1 را به عنوان ورودی دریافت کرده و تمامی اشیای داخل آن را که کمتر از P پیکسل هستند پاک می کند.و در انتها یک عکس باینری دیگر به نام bw2 ارائه می دهد(دستور 1).
با توجه به دستور 2 می بینید که این تابع دارای پارامتری به نام CONN است که تعداد اتصالات (همسایگی ها) را برای هر پیکسل مشخص می کند.
این آرگومان(CONN) به صورت اختیاری می باشد . در حالت پیش فرض تعداد اتصالات (همسایگی ها) برای هر پیکسل به صورت 8 تایی برای آرایه های دو بعدی و 26 تایی برای آرایه های سه بعدی می باشد .
اما به طور کلی CONN می تواند یکی از مقادیر زیر را داشته باشد:
آرایه های دوبعدی | آرایه های سه بعدی |
4 : 4 اتصال همسایگی | 6 : 6 اتصال همسایگی |
8 : 8 اتصال همسایگی | 18 : 18 اتصال همسایگی |
26 : 26 اتصال همسایگی |
نکته :Bw می تواند یک آرایه عددی ‚ منطقی با هر بعدی باشد ولی نباید خالی باشد. مقدار برگشتی bw یک کلاس منطقی است.
الگوریتم:
- تعیین اشیاءL=bwlabeln ( bw , CONN )
- محاسبه مساحت هر شی S=regionprops ( L , Area )
- پاک کردن همه اشیاء
bw2=ismember(L,find([s.Area]>=P)
7.2 تابع Bwboundaries
حاشیه نواحی در یک عکس باینری را رسم می کند .به عبارتی برای رسم لبه اشیاء داخل عکس به کار می رود.
Syntax:
-
- B=bwboundaries (bw)
-
- B= bwboundaries (bw , CONN )
-
- B= bwboundaries (bw , CONN , OPTION )
- [B L]= bwboundaries ( . . . )
توضیحات :
حاشیه خارجی و همچنین حاشیه خارجی ( حفره ها ) اشیاء را در عکس باینری bw رسم می کند.
این دستور همچنین حاشیه تمامی اشیاء Parent و اشیاء Child(اشیای که به طور کامل در داخل اشیای Parent قرار گرفته اند.) را نیز رسم می کند .
bw باید یک عکس باینری باشد که پیکسل های صفر تشکیل دهنده پشت زمینه و پیکسل های غیر از صفر مربوط به اشیاء داخل عکس هستند .
به شکل زیر توجه کنید:
این تابع عکس B را بر می گرداند که یک آرایه P*1 می باشد و P تعداد اشیاء و حفره ها است .
هر یک از سلول های آرایه یک ماتریس Q*2 می باشد .
هر سطر از ماتریس (Q*2) شامل مختصات سطر و ستون یک پیکسل لبه ( لبه اشیاء در عکس) می باشد .
مختصات ها در جهت حرکت عقربه های ساعت مرتب می شوند.
Q تعداد پیکسل های لبه برای یک ناحیه به هم مرتبط می باشد( یک شی در عکس).
در دستور 2 ٫CONN تعداد همسایگی ها را که برای رسم لبه های Parent و Child مورد استفاده قرار می گیرد مشخص می کند .
CONN می تواند یکی از مقادیر زیر را داشته باشد :
4 : 4 اتصال همسایگی |
8 : 8 اتصال همسایگی |
در فرمول 3 یک آرگومان اختیاری وجود دارد که می تواند یک از مقادیر زیر را داشته باشد :
‘holse’ | هم اشیاء ٫ هم نواحی حفره را جستجو می کند.حالت پیش فرض است |
‘noholse’ | فقط اشیاء داخل عکس(Parent & Child) را جستجو می کند. این حالت کارایی بیشتری دارد. |
دستور 4 : یک ماتریس برچسب (L) را بر می گرداند که دومین آرگومان خروجی است .
تمامی اشیاء و حفره ها در عکس را برچسب می گویند.
L یک آرایه دو بعدی می باشد که دارای مقادیر عددی غیر منفی است و ناحیه های مرتبط را نمایش می دهد .
( توسط این تابع به اشیاء و حفره های موجود در عکس اندیسی اختصاص داده می شود که توسط این اندیس ها می توان در آرایه L مرز هر شی یا حفره را مشخص کرد. )
اگر K امین ناحیه را در نظر بگیریم در آرایه L تمامی عناصری که دارای این مقدار هستند شئ یا حفره K را تشکیل می دهند.
تعداد حفره ها و اشیاء در آرایه L به وسیله دستور MAX(L( : )) برگردانده می شوند.
در آرایه L تمام عناصری که دارای مقادیر صفر هستند پشت زمینه را مشخص می کنند (پشت زمینه در عکس دارای اندیس صفر است.)
نکته:bw می تواند عددی ٫ منطقی و باید حقیقی و دو بعدی باشد و نباید خالی باشد و L نیز از نوع Double است.
7.3 تابع Regionprops
محاسبه خصوصیات نواحی از عکس
Syntax:
Stats=regionprops( L , Properties )
توضیحات:
مجموعه ای از خصوصیات را برای هر ناحیه برچسب دار در ماتریس برچسب (L) محاسبه می کند .
عنصر عددی صحیح مثبت (L) با ناحیه های مختلف مرتبط است .
به عنوان مثال مجموعه ای از المانهای (L) که با 1 برابرند با ناحیه 1 در ارتباط هستند و المانهایی که با 2 برابرند با ناحیه 2 در ارتباطند و …
مقدار برگشتی این تابع ٫ آرایه Stats است با طول MAX(L( : )) .
– هر فیلد از ساختار آرایه اندازه های مختلف برای هر ناحیه را ارائه می دهد که این اندازه ها توسط آرگومان Properties مشخص می شود.
Properties می تواند یک رشته باشد که توسط کاما (٫) از هم جدا می شوند و هر سلول از این آرایه رشته ای می تواند مقادیر رشته ای زیر را داشته باشد .(البته در زیر فقط به خصوصیاتی اشاره کرده ایم که کاربرد بیشتری دارد.):
- ‘Area’ : عددی است ٫ این خصوصیت تعداد حقیقی پیکسل ها در نواحی را مشخص می کند ٫ در واقع مساحت هر ناحیه را محاسبه می کند.
- ‘Certroid’: مختصات مرکز یک ناحیه را مشخص می کند که آرگومان اول آن مختصات افقی ( مختصات X) و آرگومان دوم آن مختصات عمودی ( مختصات Y) است .
- اگر عناصر دیگری هم وجود داشته باشد مربوط به بعد های دیگر است.
- این خصوصیت یک آرایه P*2 است که P تعداد نواحی ( اشیاء و حفره ها ) در عکس است.
‘Extrema’: یک ماتریس 2*8 است .- که نقاط Extrema هر ناحیه را نشان می دهد .
- هر ردیف از آرایه شامل مختصات x,y یکی از نقاط است .
- این خصوصیت فقط توسط ماتریس برچسب 2-D پشتیبانی می شود .
- نقاط Extrema همان نقاط همسایگی یک پیکسل هستند که در فصل پنجم به طور کامل توضیح داده شده است .
– برای استفاده از خصوصیات ذکر شده به صورت زیر عمل می کنیم:
Stats . properties name
نکته : اگر در آرگومان properties از عبارت ‘All’ استفاده کنیم تمامی خصوصیات مربوط به این تابع را را حساب می کند ٫ واگر این آرگومان را حذف کنیم و با عبارت ‘Basic’ را قراردهیم فقط خصوصیت ‘Area’ و ‘Centroid’ را محاسبه می کند .
-
- تابع Bwlabel
تبدیل عکس باینری به ماتریس برچسب
Syntax
L = Bwlabel ( bw ) ;
توضیحات:
قبل از اینکه از تابع regionprops استفاده کنیم باید عکس باینری را به ماتریس برچسب تبدیل کنیم ٫ که راههای متعددی برای انجام این کار وجود دارد . که یکی از روشهای آن استفاده از تابع Bwlabel می باشد .
7.5 تابع Edge
لبه های اشیاء موجود در عکس intensity پیدا می کند.
Syntax
BW=edge ( IM , ‘Method’ );
توضیحات :
تابع edge یک عکس Intensity (IM) را به عنوان ورودی دریافت می کند و یک عکس باینری (BW) را که هم اندازه IM می باشد بر می گرداند .علاوه بر این این تابع یک عدد هم برمی گرداند که اگر یک باشد یعنی لبه ها را در عکس پیدا کرده ول اگر صفر باشد یعنی چیزی در عکس وجود نداشته است (شئ در عکس یافت نشده است ) .
تابع Edge از 6 متد برای پیدا کردن گوشه ها استفاده می کند ٫ که عبارتند از :
- متد Sobel : با استفاده از مشتق Sobel کار می کند . لبه ها یی که بالاترین گرادیان را دارند بر می گرداند .
- متد Prewitt : با استفاده از مشتق Prewitt کار می کند . لبه ها یی که بالاترین گرادیان را دارند بر می گرداند .
- متد Roberts : با استفاده از مشتقRoberts کار می کند . لبه ها یی که بالاترین گرادیان را دارند بر می گرداند .
- متد Laplacian : این متد لبه هایی را پیدا می کند که بعد از گذر فیلتر Laplacian of Gaussian برابر صفر شده باشد .
- متد Zerro – crros : : این متد لبه هایی را پیدا می کند که بعد از گذریک فیلتر مشخص شده برابر صفر شده باشد .
- متد Canny : این متد لبه هایی را پیدا می کند که بیشترین گرادیان را داشته باشد و گرادیان را با استفاده از فیلتر Gaussian محاسبه می کند .
پارامتر هایی که برای تابع Edge استفاده می کنید به متدی که به کار می برید بستگی دارد و اگر متدی را مشخص نکنید به طور پیش فرض متد Sobel را در نظر می گیرد.
7.6 تابع Imfill
سطح عکس را پر می کند .
Syntax
-
- BW2= imfill (BW , Location )
-
- BW2=imfill ( BW , ‘holes’)
-
- I2=imfill (I1)
- BW2=imfill (BW)
توضیحات :
.1از نقطه مشخص شده در آرگومان Location شروع می کند وعملیات Flood-Fill را روی پیکسل های پیش زمینه عکس باینری ورودی انجام می دهد . اگرLocation یک بردار P*1 باشد این اندیس های خطی نقاط شروع را مشخص می کنند .
.2 دستور دوم حفره ها را در عکس باینری BW پر می کند . حفره ها مجموعه ای از پیکسل های پشت زمینه هستند که توسط لبه های اشیاء احاطه شده اند .
3. دستور سوم حفره ها را در عکس Intensity پر می کند . در این نوع عکس ها حفره ها یک ناحیه از پیکسل های تاریک هستند که توسط پیکسل های روشنتر احاطه شده اند .
4. دستور چهارم عکس باینری BW را در یک صفحه نشان داده و منتظر می ماند که با استفاده از موس نقطه شروع را انتخاب کنید .
نکته : عکس ورودی باید عددی و یا باینری و حقیقی بوده ونباید خالی باشد و می تواند هر بعدی داشته باشد . عکس خروجی کلاسی همانند عکس ورودی دارد .
7.7 تابع Imclearborder
اشیاء روشن متصل به حاشیه عکس را پاک می کند .
Syntax
IM2= Imclearborder ( IM )
IM2= Imclearborder ( IM , CONN )
توضیحات :
اشیایی را که روشن تر از محیط اطرافشانند و به حاشیه عکس متصل اند حذف می کند .IM یا همان عکس ورودی می تواند باینری و یا Intensity باشد و عکس خروجی هم به ترتیب باینری و یا Intensity است .
این تابع دارای یک پارامتر ورودی به نام CONN می باشد که تعداد همسایگی ها (اتصالات ) را برای آرایه های دویعدی ٫ سه بعدی و … مشخص می کند . مقدار CONN برای آرایه های دو بعدی و سه بعدی به صورت زیر است .
آرایه های دوبعدی | آرایه های سه بعدی |
4 : 4 اتصال همسایگی | 6 : 6 اتصال همسایگی |
8 : 8 اتصال همسایگی | 18 : 18 اتصال همسایگی |
26 : 26 اتصال همسایگی |
نکته 1 : برای عکس های Intensity این تابع علاوه بر اینکه ساختارهای متصل به کناره را از بین می برد ٫ شدت نور سراسر عکس را نیز کاهش می دهد .
نکته 2 : عکس ورودی باید عددی و یا باینری و حقیقی بوده ونباید خالی باشد و می تواند هر بعدی داشته باشد .
عکس خروجی کلاسی همانند عکس ورودی دارد .
7.8 تابع Imcrop
برای بریدن ( چیدن ) قسمتی از عکس کاربرد دارد .
Syntax
-
- I2= imcrop (I) intensityimage
-
- X2=imcrop( X , MAP ) indexd image
-
- RGB2 = imcrop (RGB) RGB image
-
- I2= imcrop (I , Rect)
-
- X2=imcrop( X , MAP , Rect )
- RGB2 = imcrop (RGB , Rect)
توضیحات :
تابع imcrop عکس را به اندازه یک چهارگوش مشخص شده برش می دهد .
با استفاده از دستورات 1 تا 3 این تابع عکس ورودی را در یک صفحه نمایش می دهند و منتظر می مانند تا بوسیله موس چهار گوش دلخواه خود را برای برش زدن مشخص کنید .
– اگر آرگومان ورودی را از قلم بی اندازید این تابع بر روی عکس محور های جاری عمل می کند .
هنگامی که دکمه موس را رها می کنید تابع imcrop عکس برش زده را در آرگومان خروجی (I2 , RGB , X2) قرار می دهد .
اما اگر آرگومان خروجی برای آن در نظر نگرفته باشیم این تابع عکس برش زده را در یک در یک پنجره Figure جدید نمایش می دهد .
اما روش دیگری نیز وجود دارد که قبل از اجرا برنامه میزان برش را مشخص کنیم.
برای این کار یک آرگومان ورودی دیگر نیز به تابع imcrop اضافه می کنیم که در این آرگومان مقادیر زیر را مشخص می کنیم :
Rect= [ Xmin , Ymin , Width , Height ]
و تابع imcrop به صورت :
I2= imcrop (I , Rect)
X2=imcrop( X , MAP , Rect )
RGB2 = imcrop (RGB , Rect)
بیان می شود .
نکته : اگر Rect را به عنوان آرگومان ورودی مشخص می کنید ٫ عکس ورودی باید باینری و عددی و حقیقی باشد و نباید خالی باشد ٫ عکس خروجی هم کلاسی همانند ورودی دارد . Rect نیز یک کلاس از نوع Double است .
7.9 تابع Bwperim
محیط پیکسل ها در یک عکس باینری را پیدا می کند .
Syntax
BW2= bwperim (BW)
BW2=bwperim (BW , CONN)
توضیحات :
این تابع یک عکس باینری را بر می گرداند که فقط شامل پیکسل های دور تا دور اشیاء در عکس باینری ورودی است .
هر پیکسل اگر صفر باشد و به پیکسل های غیر صفر متصل باشد ٫ آن را به عنوان نقطه ای از محیط شئ در نظر می گیرد .
این اتصالات (همسایگی ها ) به صورت 4 تایی در آرایه های دوبعدی و 6 تایی در آرایه های سه بعدی می باشد .
آرایه های دوبعدی | آرایه های سه بعدی |
4 : 4 اتصال همسایگی | 6 : 6 اتصال همسایگی |
8 : 8 اتصال همسایگی | 18 : 18 اتصال همسایگی |
26 : 26 اتصال همسایگی |
نکته :BW باید منطقی ٫ عددی و حقیقی باشد و نباید خالی باشد و BW2 هم یک کلاس منطقی است .
7.10 تابعImdilate
برای بزرک کردن اشیاء موجود در عکس استفاده می شود .
Syntax
Im2=imdilate ( IM , SE )
توضیحات :
این تابع یک عکس باینری ٫ Gray scale یا باینری دسته ای را بزرگ می کند و عکس بزرگ شده را در آرگومان خروجی قرار می دهد .
SE یک ساختار از نوع شئ و آرایه ای از اشیاء می باشد که توسط دستور Strel برگردانده می شود .
- اگر SE یک آرایه از اشیاء باشد ٫ این تابع با استفاده ازعناصر ساختار SE چندین با عمل بزرگ شدن را انجام می دهد .
7.11 تابعImerode
باعث فرسایش ( کوچک شدن ) اشیاء موجود در عکس می شود .
Syntax
IM2 = imerode( IM , SE )
توضیحات :
این تابع روی یک عکس باینری ٫ Gray scale یا باینری دسته ای عمل فرسایش را انجام می دهد و نتیجه را در آرگومان خروجی قرار می دهد .
SE یک ساختار از نوع شئ و آرایه ای از اشیاء می باشد که توسط دستور Strel برگردانده می شود .
- اگر SE یک آرایه از اشیاء باشد ٫ این تابع با استفاده ازعناصر ساختار SE چندین با عمل ساییدن را انجام می دهد .
7.12 نمونه های کاربردی
مثال های که در زیر آمده اند نمونه ای کاربردی از آنچه در این فصل آورده شده است ٫ می باشد .
- تعیین شئ مورد نظر در یک عکس Intensity . )با استفاده از قطعه قطعه کردن عکس )
- پیدا کردن اشیاء در یک عکس و محاسبه مساحت و مرکزهر یک .
- تعیین شئ مورد نظر در یک عکس Intensity:
ما می توانیم یک شئ را به راحتی از داخل یک عکس پیدا کنیم به شرطی که آن شئ مغایرت کافی با پیش زمینه داشته باشد.
در این مثال همانطور که در عکس دیده می شود ٫ می خواهیم سلولی را که به طور کامل در عکس قرارگرفته و بدون عیب است پیدا کنیم.
باید گام های زیر را طی کنیم :
- گام اول خواندن عکس.
- تعیین سلول کامل و بی عیب .
- بزرگ کردن اشیاء موجود در عکس .
- پر کردن شکافهای خالی .
- پاک کردن اشیاء متصل به حاشیه .
- صاف کردن عکس
گام 1: خواندن عکس Cell.tif .
I= imread(‘cell.tif’);
figure, imshow(I) , title(‘original image’);
original image
گام 2:همانطور که در عکس دیده می شود دو سلول وجود دارد که یکی از آنها به طور کامل در عکس جای گرفته است.ما این سلول را پیدا خواهیم کرد. کلمه دیگری که به جای Detection (پیرا کردن ) استفاده می شود ٫ Segmantation ( قطعه قطعه کردن ) است.
ابتدا ما از دستور edge با پارامتر Sobel استفاده می کنیم تا مقادیر سر حد را حساب کنیم .سپس دوباره از دستور edge استفاده می کنیم تا یک Mask باینری که شامل قسمت سلول ها است ٫ بدست آوریم.
[junk threshold] = edge(I, ‘sobel’);
fudgeFactor = .5;
BWs = edge(I,’sobel’, threshold * fudgeFactor);
figure, imshow(BWs), title(‘binary gradient mask’);
binary gradient mask
گام 3 :در binary gradient mask خطهایی نشان داده شده است .
که این خطها به طور واقعی روی عکس ترسیم نشده اند.
بلکه در واقع زمینه شئ را نشان می دهند .
در مقایسه با عکس اصلی می توانید شکافهایی که اشیاء Mask Binary را فرا گرفته ببینید .
می توانیم این شکافهای خطی را حذف کنیم .
در صورتی که عکس Sobel که به وسیله ساختار خطی توسط تابع Strel ایجاد می شود را بزرگ کنیم.
se90 = strel(‘line’, 3, 90);
se0 = strel(‘line’, 3, 0);
ماسکbinary گرادیان بوسیله ساختار عمودی که توسط ساختار خطی دنبال می شود ٫اشیای موجود در عکس را بزرگ می کند .
تابع imdilate عکس را بزرگ می کند.
BWsdil = imdilate(BWs, [se90 se0]);
figure, imshow(BWsdil), title(‘dilated gradient mask’);
dilated gradient mask
گام 4 :gradient mask بزرگ می شود و یک زمینه واقعا مناسب از سلول را نشان می دهد ٫ ولی هنوز در داخل سلول حفره هایی وجود دارد . برای پرکردن این حفره ها ٫ می توانیم از تابع imfill استفاده کنیم .
BWdfill = imfill(BWsdil, ‘holes’);
figure, imshow(BWdfill);
title(‘binary image with filled holes’);
binary image with filled holes
گام 5 : با توجه به شکل ملاحظه می کنید سلول ها با موفقیت قطعه شده اند اما هنوز سلول مورد نظر ما پیدا نشده است . برای این کار هر شئ را که به حاشیه عکس متصل شده توسط تابع imclearborder پاک می کنیم ٫ تا فقط سلول کامل و بی عیب در عکس باقی بماند.
در این تابع برای پاک کردن اتصالات از همسایگی 4 تایی استفاده می کنیم.
BWnobord = imclearborder(BWdfill, 4);
figure, imshow(BWnobord), title(‘cleared border image’);
cleared border image
گام 6 : همانطور که می دانید برای اینکه بتوانیم به عکس حالت واقعی تری بدهیم (پیکسلها یی که متعلق به اشیاء نیستند را حذف کرده و به اشیاء حالت صیقلی بدهیم)٫ می توانیم عکس را توسط یک ساختار Diamond صیقل دهیم . که این ساختار Diamond توسط تابع strel ایجاد می شود.
seD = strel(‘diamond’,1);
BWfinal = imerode(BWnobord,seD);
BWfinal = imerode(BWfinal,seD);
figure, imshow(BWfinal), title(‘segmented image’);
segmented image
در انتها ٫ برای نمایش ومشخص شدن شئ قطعه شده ٫ می توانیم روی عکس دورتادور سلول را خط بکشیم (محیط سلول ). این خط را توسط تابع bwperim ایجاد می کنیم .
BWoutline = bwperim(BWfinal);
Segout = I;
Segout(BWoutline) = 255;
figure, imshow(Segout), title(‘outlined original image’);
outlined original image
- می بینید که با انجام گام های بالا توانستیم شئ مورد نظر را در عکس intensity پیدا کنیم.
- پیدا کردن اشیاء در یک عکس و محاسبه مساحت و مرکز هر یک .
در این برنامه هدف ما پیدا کردن اشیاء بسته در عکس و محاسبه مساحت و مرکز هر یک از اشیاء است .
برای رسیدن به هدف باید گام های زیر را طی کنیم:
- خواندن عکس
- آستانه عکس
- پاک کردن نویز ها
- پیدا کردن کرانه ها
- محاسبه مساحت و مرکز هر شئ
گام 1 : خواندن عکس
RGB = imread(‘pillsetc.png’);
imshow(RGB);
گام 2 : عکس مورد نظر را به عکس سیاه و سفید (باینری ) تبدیل می کنیم ٫ تا بتوانیم توسط تابع bwboundarise آستانه یا سرحد آن را مشخص کنیم .
I = rgb2gray(RGB);
threshold = graythresh(I);
bw = im2bw(I,threshold);
imshow(bw)
گام 3 : با استفاده از توابع Bwareaopen تمام پیکسل هایی که به اشیاء موجود در عکس متعلق نیست را پاک می کنیم .
- اشیایی که کمتر از 30 پیکسل هستند را پاک می کنیم .
bw = bwareaopen(bw,30);
پرکردن حفره های بزرگ
se = strel(‘disk’,2);
bw = imclose(bw,se);
- پرکردن تمام حفره های کوچک : زیرا توابع regionprops ٫ می توانند مساحت هر شئ بسته ای هرچند کوشک باشد را حساب کنند.
bw = imfill(bw,’holes’);
imshow(bw)
گام 4 : در این قسمت فقط روی کرانه های خارجی اشیاء متمرکز می شویم . گزینه ‘noholse’ به این پردازش سرعت می بخشد ٫ زیرا از جستجو کردن تابع bwboundarise برای حفره های داخلی اشیاء جلوگیری می کند.
[B,L] = bwboundaries(bw,’noholes’);
دستور زیر ماتریس برچسب را نشان می دهد و آستانه هر شئ را رسم می کند.
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on
for k = 1:length(B)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), ‘w’, ‘LineWidth’, 2)
end
گام 5 : با استفاده از تابع regionprops می توان مساحت هر شئ موجود در عکس را محاسبه کرد . ماتریس برچسبی که توسط تابع bwboundarise برگردانده می شود ٫ می تواند دوباره برای تابع regionprops استفاده شود.
stats = regionprops(L,’Area’,’Centroid’);
for k = 1:length(B)
boundary = B{k};
area = stats(k).Area;
area_string = sprintf(‘%2.2f’,area);
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),’ko’);
end
فصل8
صدا درMATLAB
شروع هر پیشرفتی در زندگی بشر ، با پیدا شدن
یک ایده در ذهن یک انسان شروع شده است.
برایان ترسی
-
- داده های صوتی
در MATLAB توابعی وجود دارد که بوسیله آنها می توانید از انواع فایلهای صوتی و صوتی – تصویری با فرمتهای زیر استفاده کنید :
-
- NEXT/SUN SPARCstation sound ( .AU )
-
- Microsoft WAVE sound ( .WAV )
-
- Audio/Video Interleaved (.AVI)
-
- Windows-compatible sound devices
-
- Audio player and recorder objects
- Linear audio signals
نکته : MATLAB بیشتر از دو فرمت استاندارد ( .WA ٫ .AU ) استفاده می کند.
Import 8.2 کردن داده های صوتی
در ادامه به شرح توابعی می پردازیم که بوسیله آنها می توانید داده های صوتی و صوتی – تصویری را به داخل WorkSpace آورده و روی آنها پردازش انجام دهید .
گروهی از این توابع داده های صوتی و یا تصویری را از داخل فایلها ( البته فقط فایلهایی که از آنها نامبرده شده است ) می خواند و در WorkSpace قرار می دهد .
گروه دیگری از این توابع داده های صوتی را از ابزارهای ورودی (صوتی) گرفته و در WorkSpace ضبط می کند .
-
-
- خواندن داده های صوتی از فایل
-
همانطور که پیشتر بیان شده است ٫ چندین تابع وجود دارد که توسط آنها می توان داده های صوتی و یا تصویری را از داخل یک فایل گرفت و در برنامه از آنها استفاده کرد . این فایلها باید دارای فرمت (.WAV٫.AU٫.AVI ) باشند .
-
- تابع Auread : این تابع داده های صوتی را از فایلهای صوتی با پسوند (.AU) گرفته و در آرایه ای ذخیره می کند .
- تابع Wavread : این تابع داده های صوتی را از فایلهای صوتی با پسوند (.WAV) گرفته و در آرایه ای ذخیره می کند .
- تابع Aviread : این تابع داده های تصویری را از فایلهای تصویری با پسوند (.AVI) گرفته و در آرایه ای ذخیره می کند .
حال به شرح مختصری راجع به تابع Wavread می پردازیم :
تابع Wavread :
Syntax
y = wavread(‘filename’)
[y,Fs,bits] = wavread(‘filename’)
[…] = wavread(‘filename’,N)
[…] = wavread(‘filename’,[N1 N2])
[…] = wavread(‘filename’,’size’)
این تابع یک فایل صوتی را که نام آن در ‘filename’ مشخص می شود ٫ فراخوانی کرده و داده های نمونه آن را در آرایه y قرار می دهد .
اگر پسوندی به فایل اختصاص ندهید ٫ به طور پیش فرض فرمت WAV را در نظر می گیرد .
مقادیر موجود در آرایه y در بازه [-1 1] قرار دارند .
آرگومانهای خروجی اختیاری می باشند و اگر از آنها استفاده کنید ٫ آنگاه سرعت صوت مورد نظر در Fs و تعداد بیت های هر نمونه در bits قرار داده می شوند .
اگر ازn نیز استفاده کنید فقط از n نمونه اول موجود در هر کانالی که در فایل قرار دارد ٫ استفاده می شود .
اگر n=[n1 n2] باشد آنگاه فقط نمونه هایی بر گردانده می شوند که در بازه n1 و n2 موجود در هر کانال قرار دارند .
پارامتر size نیز اندازه داده های صوتی موجود در فایل را علاوه بر خود داده ها برمی گرداند .
این حالت برای از پیش تخصیص دادن حافظه یا تقریب استفاده منبع ٫ مناسب می باشد .
-
-
- ثبت داده های صوتی
-
برای اینکه بتوانیم داده های صوتی را از یک دستگاه ورودی ( صوتی ) گرفته و در WorkSpace ذخیره کنیم ٫ می توانیم از AudioRecorderObject ها استفاده کنیم .
این اشیاء ارتباط بین MATLAB و دستگاههای ورودی مثل میکروفن را برقرار می کنند .
ومی توانیم از توابع AudioRcorder برای ایجاد این اشیاء استفاده کنیم .
یکی از توابعی که برای ایجاد این اشیاء استفاده می شود ٫ تابع Wavrecord می باشد ٫ که فایلی را با فرمت WAV درWorkSpace ذخیره می کند .
حال به شرح مختصری راجع به این تابع می پردازیم :
تابع Wavrecord :
Syntax
y = wavrecord(n,Fs)
y = wavrecord(…,ch)
y = wavrecord(…,’dtype’)
این تابع داده های نمونه را از دستگاه ورودی گرفته و در آرایه y ضبط می کند .
در صورت استفاده از پارامتر n فقط از n نمونه اول موجود در هر کانال که در دستگاه ورودی قرار دارد ٫ استفاده می شود .
پارامتر Fs سرعت ضبط نمونه ها در ثانیه را بیان می کند که بر اساس HZ می باشد و به طور پیش فرض مقداری برابر 11025 Hz دارد .
پارامتر ch تعداد کانالهای دستگاه ورودی را مشخص می کند و می تواند دو مقدار 1 و 2 را اختیار کند ٫ که به ترتیب برای MONO و STERO می باشد و حالت پیش فرض آن 1 می باشد .
از پارامتر ‘dtype’ برای مشخص کردن نوع داده ضبط شده استفاده می کنیم و می تواند یکی از مقادیر زیر را اختیار کند :
- ‘double’ (default value), 16 bits/sample
- ‘single’, 16 bits/sample
- ‘int16’, 16 bits/sample
- ‘uint8’, 8 bits/sample
برای گوش کردن فایل های ضبط شده می توانیم از AudioPlayObject ها استفاده کنیم .
با استفاده از توابع AudioPlayer می توانیم این اشیاء را ایجاد کنیم . یکی از توابعی که برای ایجاد این اشیاء استفاده می شود ٫ تابع Waveplay است.
فصل9
webcam
هرچه را با اطمینان انتظار وقوعش را داشته باشید ،
اتفاق می افتد.
برایان ترسی
9.1 تشخيص وب کم
تابع Imaqhwinfo يک سري اطلاعات درمورد خصوصيات وب کم نصب شده مي دهد.
imaqInfo=imaqhwinfo
اطلاعات به شرح زيراست:
imadInfo=
InstalledAdaptors: {‘dt’ ‘matrox’ ‘winvideo’}
MatlabVersion: ‘6.5.1 ( R13+)’
ToolboxName : ’Image Acquisition Toolbox’ ToolboxVersion : ‘1.0 (R13+)’
به هريک از اطلاع هاي بالا به صورت گذاشتن نقطه بين نام اختصاصي به فايل اطلاعات و اطلاع مورد نظر می توان دسترسي داشت به صورت زير:
با استفاده ازدستور فوق نام دستگاه را بدست مي آوريم:
ImaqInfo . InstalledAdaptors
Ans=
‘dt’ ‘matrox’ ‘winvideo’
9.2 بدست آوردن اطلاعات در مورد وب کم
با استفاده ازتابع Imaqhwinfo و نام دستگاه که توسط دستور قبل بدست آورديم مي توانيم اطلاعاتي در مورد چگونگي دسترسي به تصاوير بدست آوريم.
matroxInfo=imaqhwinfo( ‘matrox’ )
9.3 دسترسي به تصاوير
با استفاده از تابع VideoInputمي توان بين MATLAB و دوربين ارتباط برقرار کرد بدين صورت که بايد شیي از آن نوع تعريف کنيم.
Vidobj=videoinput(‘dt’ , 1 , ’RS170’)
9.4 دسترسي به اطلاعات
براي دسترسي به ليست کامل ازخصوصيات شي هاي و مقادير هريک از آنها بايد از تابع GET به همراه نام شي استفاده کرد.
get(Vidobj)
براي دسترسي به طور جداگانه به هريک از عناصر فوق به صورت زير عمل مي کنيم.
مثلا مي خواهيم بفهميم که دوربين در هر بار چند فريم مي گيريد:
framesPerTriggerValue = get(Vidobj, ‘FramesPerTrigger’ )
ويا براي نتظيم ميزان روشنايي تصاوير:
brightnessValue = get(Vidobj, ‘Brightness’)
9.5 بدست آوردن تصاوير روي حافظه
براي بدست آوردن تصاوير روي حافظه بايد توسط تابع IMAQFIND به آرايه اي از تصاوير ورودي دسترسي پيدا کرد.
objects = imaqfind
9.6 پاک کردن تمام تصاوير از روي حافظه
براي پاک کردن تمام شي ها از روي حافظه از تابع DELETEبه همراه شماره شي استفاده مي کنيم.
delete(objects(1((
البته تابع فوق شي ها را از روي حافظه پاک مي کند و به ناحيه کاري MATLABکاري ندارد براي اينکه بتوانيم ناحيه کاري MATLABرا پاک کنيم بايداز دستورCLEARاستفاده کنيم
9.7 پيش نمايش تصاوير
قبل از اينکه از تصاوير بدست آمده استفاده کنيم بايد يک پيش نمايش از آن داشته باشيم توسط دستور PREVIEW مي توان اين پيش نمايش را داشت .
preview(vidobj)
9.8 بدست آوردن يک فريم
براي بدست آوردن يک تک فريم از تابع GETSNAPSHOT استفاده مي کنيم.
snapshot = getsnapshot(vidobj)
و براي نمايش ان در يک پنجره Figureدستور زير را قرار مي دهيم.
imagesc(snapshot)
9.9 بدست آوردن چند فريم در يک زمان
براي مشخص کردن تعداد فريم ها يي که قرار است در يک زمان دريافت کند بايد شي ورودي رابه صورت زير تنظيم کنيم :
set(vidobj, ‘FramesPerTrigger’, 50);
در دستور فوق 50 تعداد فريم ها است.
براي اينکه شروع بکار بکنیم و تعدادی فريم جديد در يافت کنيم بايد از دستور START استفاده کنيم.
start(vidobj)
براي بازيابي فريم هاي که در حافظه وجود دارد بايد از تابع GETDATA استفاده کنيم . اين تابع به همراه شماره فريم هايي که مي خواهيم بر گردانيم استفاده مي شود.
imageData = getdata(vidobj, 30);
9.10 باز نگري اطلاعات
براي بازنگري اطلاعات که تسطيح شده بدون اينکه اين اطلاعات را از حافظه خارج کنيم از تابعPEEKDATA به همراه شي ويدويي و تعداد فريم ها استفاده مي کنبم .
ديدن تصاوير به وسيله اين تابع هيچکدام از تصاوير را در روي حافظه را پاک نمي کند.
9.11 ذخيره کردن اطلاعات در ديسک
تصاوير بدست آمده از وب کم ممکن است بر روي حافظه يا ديسک ذخيره شود براي ذخيره کردن اطلاعات بر روي حافظه بايد شي ويدوئي را تنظيم کنيم.
vidobj = videoinput(‘winvideo’, 1, ‘Y800_640x480’)
set(vidobj, ‘LoggingMode’, ‘disk’)
9.12 تنظيم MATLAB براي ذخيره تصاويردر ديسک
براي ذخيره کردن در ديسک لازم است شي AVIFLE را در MATLAB تنظيم کنيم.شي AVIFLEدر MATLAB نه يک تابع است و نه يک جعبه خصوصيات.و فقط شي براي تنظيم کردن خصوصيات است و استفاده از آن مشروط به ذخيره اطلاعات بر روي ديسک است. البته تنظيمات اين شي بايد قبل از تنظيم کردن شي ويدوئيي (LoggingMode) باشد.
logfile = avifile(‘logfile.avi’)
vidobj.DiskLogger = logfile
start(vidobj)
wait(vidobj, 5)
وقتي تعداد زيادي از فريم ها روي ديسک ذخيره مي شود ممکن است اين فريم ها روي هم قرار بگيرند براي جلوگيري از اين عمل بايد از خصوصيت DiskLoggerFrameCount استفاده کنيم و اين بايد وقتي صورت بگبرد که تمام فريم ها به ديسک منتقل شده باشند.
vidobj.FramesAcquired
اين دستور براي مشخص شدن تعداد فريم هاي مورد نياز است.
vidobj.DiskLoggerFrameCount
باید مطمئن شويم که تمام فريم ها روي ديسک ذخيره شده باشند.
aviobj = vidobj.Disklogger;
file = close(aviobj)
همه فريم ها نوشته شده اند و سپس فايل را مي بنديم.
9.13 پيکر بندي اوليه راه انداز وب کم
براي بدست آوردن ليستی از خصوصيات راه انداز وب کم و تنظيمات آن بايد از تابع TRIGGERINFO به همراه شي ويدوئي استفاده کنيم. تابع فوق تمام راه انداز هایی را که براي بدست آوردن تصوير به وسيله وب کم پشتيباني مي شود بر مي گرداند .
تمام تصاويري که بدست مي آيند فوراٌ با يک راه انداز پشتيباني مي شوند.
vidobj = videoinput(‘matrox’, 1);
9.14 دسترسي به تصاوير وب کم
triggerinfo(vidobj)
برای نشان دادن تمام راه انداز هاي موجود ، براي تصاوير بدست آمده بايد از تابع TRIGGERCONFIG استفاده کنيم .
triggerconfig(vidobj, ‘hardware’, ‘fallingEdge’, ‘optoTrigger’)
currentConfiguration = triggerconfig(vidobj)
مشاهده خصوصيات راه انداز.
9.15 راه اندازي فوري
راه انداز هاي فوري داده هاي ضبط شده را که به محض اجرا شدن تابع START ذخيره مي شوند نشان مي دهند.
تنظيم نوع راه انداز
triggerconfig(vidobj, ‘immediate’)
9.16 راه انداز هاي دستي
راه انداز هاي دستي بايد تابع TRIGGER راقبل از آنکه اطلاعات ضبط شوند استفاده کنند.
triggerconfig(vidobj, ‘manual’)
تنظيم راه انداز (به صورت دستي)
9.17 آرايه اي از تصاوير
در بعضي از کار برد هاي خاص تصوير هاممکن است نتيجه پردازشهاي قبلي بر روي آن باقي مانده باشد در ان صورت تصوير اوليه از بين رفته است.
براي حل اين مشکل بايد چند فريم از تصاوير تهيه کنيم.
يک نمونه کاريري از تهيه چند فريم در يک بازه زماني:
vid = videoinput(‘winvideo’, 1, ‘RGB24_320x240’);
دسترسي به وب کم با قالب بندي 24 بيت و رنگ RGB
triggerconfig(vid, ‘immediate’);
با فرض اينکه تصوير به محض اجراي دستور START آغاز شود.
framesPerTrigger = 5;
set(vid, ‘FramesPerTrigger’, framesPerTrigger)
تنظيمات براي بدست آوردن 5 فريم هم زمان
براي کنترل ميزان ذخيره فريم ها دو روش وجود دارد:
- تنظيم وب کم
- استفاده از تابع TimerFcn
در اولين روش ميزان فريم هايي که وسيله بايد پشت سر هم نشان دهد را مشخص مي کنيم و درروش دوم بايد از تايمر استفاده کنيم.
9.18 دسترسی به فريم ها
بدست آوردن فريم ها در روش اول
ميزان فريم هاي که بايد گرفته شود بايد در تنظيمات مربوط به شي ويدوئي اعمال شود.
src = getselectedsource(vid);
گرفتن اطلاعات مربوط به شي ويدوئي
fps = 30;
set(src, ‘FrameRate’, num2str(fps))
با استفاده از خصوصيتFrameRate از شي ويدوئي مشخص مي کنيم که تعداد 30 فريم در دقيقه گرفته شود.
acqPeriod = 10;
frameDelay = fps * acqPeriod
set(vid, ‘TriggerFrameDelay’, frameDelay)
– ميزان پيش فرض تعداد فريم ها 5 فريم در هر 10 دقيقه است بهمين علت جعبه ابزار تا هنگامي که 300 فريم نگرفته باشد نمي تواند تصويري را به بافر انتقال دهد.
totalTrigs = nAdditionalTrigs + 1;
acqDuration = (acqPeriod * totalTrigs) + 3
vid.Timeout = acqDuration;
براي آنکه مطمئن باشيم تمام فريم هادر زمان معين شده گرفته شده اند تنظيمات مربوط به زمان را کمي بيشتر در نظر مي گيريم .
9.19 آرايه بندي تصاوير
براي ذخيره تصاوير بدست آمده در ديسک بايد از شي AVIFILE استفاده کنيم بهتر است که مجموعه فريم هايي که بدست مي آيند به صورت آرايه تنظيم شوند تا در زمان پردازش راحتردر دسترس قرار بگيرند.
aviobj = avifile(‘imaverages.avi’);
aviobj.Fps = fps;
به وجود آوردن يک فايل از نوعAVI.
userdata.average = {};
userdata.avi = aviobj;
vid.UserData = userdata;
بدست آوردن شي ويدوئي UserData براي ذخيره کردن اطلاعات تصاوير
vid.TriggerFcn = {‘util_imaverage’, framesPerTrigger}
تنظيم شي ويدوئي براي پردازش هر 5 فريمي که بدست مي آورد به تنظيم کردن وقفه بازگشتي که در هر با ر که شروع به کار مي کند اجرا مي شود.
start(vid)
wait(vid, acqDuration);
ابتدا شروع مي کند و سپس براي گرفتن کامل اطلاعات مدتي صبر مي کنيد تا اطلاعات از بين نرود .
userdata = vid.UserData;
aviobj = userdata.avi;
framesWritten1 = aviobj.TotalFrames
باز بيني آرايه براي ذخيره کردن روي فايل AVI.
imaqmontage(userdata.average);
نمايش آرايه اي ازفريم هايي که از تصاوير بدست آمده.
9.20 استفاده از تايمر در گرفتن فريم ها
روش ديگر براي گرفتن فريم ها استفاده از خاصيت TimerFcn شي ويدوئي است. TimerFcn هر 10 دقيقه يکبار اجرا مي شود و در هر بار 5 فريم دريافت مي کند و آنها را به صورت آرايه در مي آورد.
هنگامي که در مدت زمان معين شروع به گرفتن فريم ها مي کند در همان زمان راه انداز دستي شروع به کار مي کند .
برنامه فوق روش گرفتن فريم با استفاده از تايمر است و نياز به تنظيم ميزان فريم ها ندارد.
vid = videoinput(‘winvideo’, 1, ‘RGB24_320x240’);
triggerconfig(vid, ‘manual’);
vid.TimerFcn = @trigger;
vid.TimerPeriod = acqPeriod;
دسترسي به وسيله و تنظيم تايمر براي اينکه هر 10 دقيقه فريم هايي از تصوير بگيرد.
set(vid, ‘FramesPerTrigger’, framesPerTrigger)
set(vid, ‘TriggerRepeat’, nAdditionalTrigs)
تنظيم وب کم براي انکه در هر بار دستيابي تعداد 5 فريم بگيرد . و 9 بار اين عمل را تکرار کند.
vid.TriggerFcn = {‘util_imaverage’, framesPerTrigger};
aviobj2 = avifile(‘imaverages2.avi’);
aviobj2.Fps = fps;
تنظيمات براي انکه ادامه پردازش در فايل AVI.
userdata2.average = {};
userdata2.avi = aviobj2;
vid.UserData = userdata2;
استفاده از شي UserData براي ذخيره اطلاعات مربوط به فريم ها.
start(vid);
wait(vid, acqDuration);
شروع بکار و توقف براي اينکه تصاوير روي هم قرار نگيرند.
userdata2 = vid.UserData;
aviobj2 = userdata2.avi;
framesWritten2 = aviobj2.TotalFrames
بررسي اينکه فريم ها را در فايل AVI ذخيره شده باشد.
imaqmontage(userdata2.average);
نمايش آرايه اي ازفريم هايي که از تصاوير بدست آمده.
فصل 10
پورت پارالل
برای هر اتفاقی دلیلی و برای هر معلولی علتی وجود دارد.
برایان تریسی
10.1 به وجود آوردن شي ورودي و خروجي
شما مي توانيد به وسيله تابع digitalio يك شي ورودي خروجي به وجود آوريد.تابع digitalio نام آداپتور و شناسه مربوط به سخت افزار را به عنوان ورودي دريافت مي كند.
در مورد پورت پارالل شناسه ورودي مي تواند یكي از مقادير زير را داشته باشد(LPT1 ,LPT2 ,LPT3) . براي داده هاي بدست آمده از بورد شناسه وسيله , مربوط به شماره پين هايي است كه بورد به پورت وصل شده است.
به وسيله تابع daqhwinfo مي توان آداپتور فعال و شناسه وسيله را مشخص كرد.
هر شي از نوع ورودي خروجي مربوط به يك وسيله است كه به پورت مرتبط مي شود. مثلا براي به وجود آوردن يك شي براي بورد مشخص شده به صورت زير عمل مي كنيم:
dio = digitalio(‘nidaq’,1);
اكنون شي براي MATLAB شناخته شده است شما مي توانيد عناصر آن را توسط دستور who ببينيد.
whos dio
Name Size Bytes Class
dio 1×1 1308 digitalio object
Grand total is 40 elements using 1308 bytes
10.2 پورت پارالل
سيستم سه نوع پورت را بانام هاي Lpt1,Lpt2,Lpt3 را پشتياني مي كند از اين پورتها مي توان با آدرس هاي معمولي مبناي 16 استفاده كرد 378 , 278 ,3bc اين آدرس به وسيله bios كاميپوتر مشخص مي شود.
ولي اين نرم افزار فقط از پورتLpt1 با آدرس 378 پشتيباني مي كند.
Parport=digitalio(‘parallel’,’lpt1’)
10.3 اضافه كردن خط به شي ورودي خروجي
بعد از اينكه شما شي از نوع ورودي خروجي درست كرديد شما بايد خط به آن اضافه كنيد:
به وسيله نابع addline مي توانيد خط اضافه كنيد اين تابع به شي ورودي نياز دارد و شناسه خطي از سخت افزار را كه لازم داريد(شماره پين پورت)و همچنين نوع خط را بايد مشخص كنيد out,in ورودي يا خروجي.
Hwlines=addline(dio,0:7,’out’);
توسط اين دستور 8 خط خروجي از شماره 0 تا 7 مشخص مي شود.
اگر مقادير شي ورودي خروجي را كنترل كنيد تغيير كرده است.
whos hwlines
Name Size Bytes Class
hwlines 8×1 536 dioline object
Grand total is 13 elements using 536 bytes
شما می توانید توسط hwlines به راحتی با خطوط ارتباط برقرار کنید بعنوان مثال شما می توانید خصوصیات را برای یک یا چند خط بدست آورید.
در ابتدا شما باید یک خط را اضافه کنید خصوصیاتی که در زیر لیست شده است به صورت اتوماتیک مقدار می گیرد .این خصوصیات توضیحاتی درباره خطوط می دهد.
نام خصوصیت | توضیحات |
HwLine | شناسه سخت افزار را مشخص می کند . |
Index | شامل شاخصه های از خطوط سخت افزار است. |
Parent | شامل پدر خط است(وسیله شی) |
Type | شامل خط است. |
شما این خصوصیات را می توانید به وسیله تابع get مشاهده کنید.
get(hwlines,{‘HwLine’,’Index’,’Parent’,’Type’})
ans =
[0] [1] [1×1 digitalio] ‘Line’
[1] [2] [1×1 digitalio] ‘Line’
[2] [3] [1×1 digitalio] ‘Line’
[3] [4] [1×1 digitalio] ‘Line’
[4] [5] [1×1 digitalio] ‘Line’
[5] [6] [1×1 digitalio] ‘Line’
[6] [7] [1×1 digitalio] ‘Line’
[7] [8] [1×1 digitalio] ‘Line’
10.4 خصوصيات خطوط پورت
وقتي شي از نوع ورودي خروجي درست كرديد بايدآنرا تنظيم كنيم كه هر كدام از خطوط جهت چه كاري استفاده شود مي توانيم توسط پورت ورودي از خطوط بخوانيم و توسط پورت خروجي در خطوط بنويسم .
پورت پارالل داراي 8 خط داده , 4 خط كنترل , 5 خط وضعيت و 8 خط زمين است .
نمايي از اين 25 پين مشاهده مي شود.
خطوط از از ارزشهاي منطقي TTL استفاده مي كنند به اين صورت كه وقتي TTL بيشترين سطح است خط روشن است(true) وقتي TTL كمترين سطح است خط خاموش است(false )
شماره پورت | شماره پين | توضيحات |
0 | 9-2 | 8 خط I/O با خط9 مهمترين بيت انتقال پيدا مي كند. |
1 | 13-10 و15 | 5 خط ورودي براي وضعيت استفاده ميشود. |
2 | 17و16و14و1 | 4 خط I/O براي كنترل استفاده ميشود. |
توجه كنيد در بعضي از موارد ,پورت 0 ممكن است يكطرفه و فقط خروجي باشد.در بعضي موارد بسته به سخت افزار مي شود آنرا ورودي خروجي تنظيم كرد.
خصوصيات پورت پارالل در زير نشان داده شده است :
hwinfo = daqhwinfo(parport);
hwinfo.Port(1)
ans =
ID: 0
LineIDs: [0 1 2 3 4 5 6 7]
Direction: ‘in/out’
Config: ‘port’
hwinfo.Port(2)
ans =
ID: 1
LineIDs: [0 1 2 3 4]
Direction: ‘in’
Config: ‘port’
hwinfo.Port(3)
ans =
ID: 2
LineIDs: [0 1 2 3]
Direction: ‘in/out’
Config: ‘port’
براي باز بيني اطلاعات مربوط به پين ها بايد از شماره پورت استفاده كنيم.
dio = digitalio(‘parallel’, 1)
نشان دادن خلاصه ای از خصوصیات شی
addline(dio, 0:16, ‘in’)
Index: LineName: HwLine: Port: Direction:
1 ‘Pin2’ 0 0 ‘In’
2 ‘Pin3’ 1 0 ‘In’
3 ‘Pin4’ 2 0 ‘In’
4 ‘Pin5’ 3 0 ‘In’
5 ‘Pin6’ 4 0 ‘In’
6 ‘Pin7’ 5 0 ‘In’
7 ‘Pin8’ 6 0 ‘In’
8 ‘Pin9’ 7 0 ‘In’
9 ‘Pin15’ 0 1 ‘In’
10 ‘Pin13’ 1 1 ‘In’
11 ‘Pin12’ 2 1 ‘In’
12 ‘Pin10’ 3 1 ‘In’
13 ‘Pin11’ 4 1 ‘In’
14 ‘Pin1’ 0 2 ‘In’
15 ‘Pin14’ 1 2 ‘In’
16 ‘Pin16’ 2 2 ‘In’
17 ‘Pin17’ 3 2 ‘In’
10.5 گذاشتن و برداشتن مقادير بر روي پورت
10.5.1 نوشتن مقادير ديجيتالي بر روي پورت
با استفاده از تابع putvalue مي توانيم مقادير ديجيتالي را بر روي پورت بگذاريم. پارامتر هاي اين تابع شي ورودي خروجي و مقاديري است كه مي خواهيم بر روي پورت قرار دهيم است.شما مي توانيد مقادير خروجي را يا به صورت مقادير دهدهي و يا به صورت بردار دودويي قرار دهيم.بردار دودويي يك آرايه منطقي است كه توسط اولين ستون از كم ارزش ترين بيت تا آخرين بيت از پر ارزشترين بيت قرار مي گيرد.مثلا مقدار دهدهي 32 را به اين صورت به بردار دودويي تنظيم مي كنيم.
[1 1 1 0 1] = 20+21+22+24
اين كار را مي توان توسط تابع dec2binvec انجام داد.
به مثال زير توجه كنيد.
یک شی از نوع ورودی خروجی تشکیل می دهیم و 8 خط خروجی از پورت صفر.
dio = digitalio(‘nidaq’,1);
addline(dio,0:7,’out’);
برای نوشتن مقدار 23 بر روی پورت
data = 23;
putvalue(dio,data)
گذاشتن مقدار بر روی یپن های خاصی
putvalue(dio.Line(1:8),data)
نوشتن مقادیر بردار باینری با استفاده از شی ورودی خروجی و خصوصیت line
bvdata = dec2binvec(data,8);
putvalue(dio,bvdata)
putvalue(dio.Line(1:8),bvdata)
دومين آرگومان dec2binvec تعداد خطوط را مشخص مي كند. چنانچه نخواهيم از اين تابع استفاده كنيم مي توانيم به صورت زير بردار دودويي را تشكيل دهيم.
Bvdata=logical([1 1 1 0 1 0 0 0])
Putvalue(dio,bvdata)
10.5.2 خواندن مقادير دودويي
با استفاده از تابع getvalue مي توانيم مقادير را از روي چند خط ورودي بخوانيم.پارامتر اين تابع يك شي از نوع ورودي خروجي است.
مثال
dio = digitalio(‘nidaq’,1);
addline(dio,0:7,’in’);
خواندن از روی خطوط جاری
portval = getvalue(dio)
portval =
1 1 1 0 1 0 0 0
خواندن از روی 5 خط اول
lineval = getvalue(dio.Line(1:5))
lineval =
1 1 1 0 1
شما مي توانيد توسط تابع binvec2dec مقدار خوانده شده از روي پورت را به ارزش دهدهي تبديا كنيم.
out = binvec2dec(lineval)
out =
23
10.6 تابع delete ,clear
توسط تابع clear مقادیر روی پورت را پاک می کنیم و توسط تابع delete این شی را به طور کامل از ناحیه کاری بر می داریم.
10.7 توليد وقفه تايمر
بايد بتوان داده هاي آنالوگ ورودي و خروجي را در يك ماشين ذخيره سازي كرد و همچنين كلاك هايي را براي برداشت مقادير از روي دستگاه را داشته باشيم .
ولي بخاطر اينكه شي ورودي خرجي هيچ گونه بافري را ندارد به همين جهت نمي تواند داده را در جايي ذخيره كند. و همچنين توابع getvalue, putvalue نمي توانند كلاك پذير باشند بايد به صورت پويا مقاديررا بروي خطوط گذاشته و بردارند .
براي رفع اين مشكل مي توان مي توانيم وظايفي را در زمان مشخص انجام داد (update).
10.7.1 وقفه هاي تايمر
تنها وقفه اي كه با شي ورودي خروجي كار مي كند وقفه تايمر است.اين وفقه بعد از گذشت يك محدودي زماني تكرار مي شود.
از جمله خصوصيات آن در جدول زير آمده است:
نام خصوصيت | توضيحات |
Running | اگر وسيله در حال كار باشد مشخص مي كند. |
TimerFcn | تابع برگشتي را كه در بازه هايي از زمان بايد اجرا شود را مشخص مي كند. |
TimerPeriod | بازه زماني بين دو وقفه را مشخص مي كند. |
وقفه تايمر وقتي اتفاق مي افتد كه زمان مشخص شده در خصوصيت TimerPeriod سپري شده باشد.اين وقفه تابع مشخص شده در TimerFcn را مقدار دهي مي كند .
10.8 شروع كردن و متوقف كردن شي ورودي خروجي
توسط تابع start مي توانيم استفاده ازپورت را شروع كنيم.
Start(dio)
وقتي start اجرا مي شود خصوصيت runing به صورت اتوماتيك روشن مي شود.و وفقه تايمر مي تواند توليد شود . اگر شما تابع شروع را اجرا كنيد در صورتي كه هيچ مقداري بر روي پورت قرار نداده باشيد اين تابع مقدار اشتباه را بر مي گرداند.(error)
و وقتي نمي خواهيم از وسيله استفاده كنيم آنرا بايد توسط تابع stop متوقف كنيم.
يك مثال از استفاده وقفه تايمر:
dio = digitalio(‘nidaq’,1);
addline(dio,0:7,’in’);
تنظيم تايمر برای فراخوانی تابع هر 5 ثانيه
set(dio,’TimerFcn’,@daqcallback)
set(dio,’TimerPeriod’,5.0)
start(dio)
pause(11)
delete(dio)
clear dio
فصل 11
چندی در باب پروژه
برای هر اتفاقی دلیلی و برای هر معلولی علتی وجود دارد.
برایان تریسی
11.1اهداف پروژه
یک عکس 4X3 را دریافت کرده و تشخيص دهد كه عکس زن است يا مرد.
ما برای انجام این پروژه دو الگوریتم را مورد آزمایش قرار دادیم که به توضیح هر یک از آنها می پردازیم.
11.2الگوریتم اول
اساس کار این برنامه بر اساس رنگ های موجود در عکس است که الگوریتم آن به شرح زیر می باشد:
-
-
-
- شروع
- دریافت عکس
- تشخیص اندازه آن (باید 4×3 باشد)
- عکس را تیره می کند.
- تصوير را به صورت عمودي و افقی به دو قسمت مي كند (یک برش از وسط عکس برای پردازش جدا می کند)
- به مقدار 10 پيكسل از y ها و از x های عکس داخلm2 ريخته ميشود.
- حال از بالا به پايين مجموع هر سطر از m2 را محاسبه كرده و اگر سطري با سطر قبلي حدود 10% اختلاف مقدار داشت از همان سطر تا 10 پيكسل پايين را داخل متغيير t1 می ریزیم .
- از پايين عكس به اندازه t1 داخل متغير t2 ريخته مي شود .
- در اين قسمت t1 با t2 مقايسه مي شود اگر مساوي بود يا اينكه كمتر از 10 درصد خطا داشت تصوير يك خانم است در غير اين صورت تصوير يك مرد است.
- پایان
- کد الگوریتم اول
-
-
-
- ic=imread(uigetfile(‘*.jpg’));%input picture
-
- s=size(pic);
-
- if (fix(s(1,1)/4)==fix(s(1,2)/3))
-
- image(pic);
-
- pic=pic-70;%dark picture
-
- mx=fix(s(1,1)/2);
-
- my=fix(s(1,2)/2);
-
- m2=pic(:,my-5:my+5,:);
-
- xl=fix(sum(m2(1,:,1)));
-
- for i=2:mx
-
- xu=fix(sum(m2(i,:,1)));
-
- a=abs((xu-xl)/xu)*100;
-
- xl=xu;
-
- if (a>10)
-
- t1=m2(i+10:i+20,:,:);
-
- break;
-
- end
-
- end
-
- t2=m2(s(1,1)-20:s(1,1)-10,:,:);
-
- dd1=sum(sum(sum(t1)))
-
- dd2=sum(sum(sum(t2)))
-
- avd=fix((dd1+dd2)/2)
-
- d1=[dd1 dd2];
-
- for i=1:2
-
- if avd>d1(1,i)
-
- d2(1,i)=d1(1,i)-(d1(1,i)*0.2);
-
- else
-
- d2(1,i)=d1(1,i)+(d1(1,i)*0.2);
-
- end
-
- end
-
- a=abs((sum(d2)-sum(d1))/sum(d2))*100
-
- if (a<10)|(dd1==dd2)
-
- text(22,22,’Woman’,’color’,[0,0,0]);
-
- else
-
- text(22,22,’Man‘,’color’,[0,0,0]);
- End
11.2.2 مشکلات الگوریتم اول
- عکس دریافت شده باید 4X3 باشد .
- در تشخیص مرد اگر 10 پیکسل بالا با 10 پیکسل پایین هم رنگ باشد عکس مذکور زن بر می گرداند.
- (بعنوان مثال این حالت زمانی رخ می دهد که مرد دارای موی سیاه و لباس آن سیاه رنگ باشد )
11.3 الگوریتم دوم
به خاطر مشکلی که در کار کردن با رنگ ها پیش می آید از کار کردن با رنگها صرف نظر کردیم و اساس کار را بر مبنای پیدا کردن اشیاء در عکس قرار دادیم از طرفی چون مبنای کار ما براساس عکس گرفته شده از درب آموزشکده بود با عکس های بزرگتر سرو کار داشتیم در نتیجه رنگها بیشتر می شد واستفاده از روش ذکر شده امکان پذیر نبود.
در نتیجه با تفکیک اشیاء بسته عکس به پیدا کردن اشیایی شبیه به بیضی در عکس پرداختیم زیرا با اندکی فکر دریافتیم در عکس های خانم ها به علت اینکه همیشه یک حجاب بر دور صورت دارند ، یک شکلی شبیه بیضی حادث می گردد.
ولی در عکس های آقایان چنین چیزی بدست می آید. وملاک کار را همین تفاوت قرار دادیم.
11.4 ساخت فايل EXE در MATLAB
11.4.1 تعاريف پايه:
mcc: فرماني است که توسط آن مي توان از کامپايلر MATLAB استفاده کرد.
MCR: مخفف MATLAB Component Runtime مي باشد و نصب آن در کامپيوتر مقصد ، براي اجرا شدن فايلهاي exe ايجاد شده توسط MATLAB ، ضروري است.
CTF: مخفف Component Technology File مي باشد و در هنگام کامپايل شدن M-File ، ساخته مي شود. وجود اين فايل براي اجرا شدن برنامه هاي exe ضروري است.
فايل هاي exe ايجاد شده توسط MATLAB براي اجرا شدن نياز به نصب MCR و فايل CTF توليد شده توسط کامپايلر را دارند.
براي ساخت EXE در MATLAB با استفاده از M-File ، مراحل زير را انجام مي دهيم:
- در ابتدا برنامه خود را تبديل به function مي کنيم.
- با استفاده از دستور mcc –m <filename> ، برنامه را کامپايل کرده و کد exe آن را توليد مي کنيم.
- توسط دستور buildmcr در MATLAB ، برنامه نصب MCR را به صورت يک فايل zip در مي آوريم.
- فايل zip مربوط به نصب MCR و فايل exe و CTF توليد شده توسط کامپايلر را درون package موردنظر قرار داده و به کامپيوترهاي ديگر منتقل مي کنيم.
استفاده از کد exe ايجاد شده در کامپيوترهاي ديگر:
- فايل zip مربوط به نصب MCR را از حالت zip خارج کرده و MCR را نصب مي کنيم.
- مسير زير را به path سيستم خود اضافه مي کنيم.
<mcr_root>\runtime\win32
براي اضافه کردن مسير فوق به path سيستم بايد متغيير محيطي PATH را تغيير دهيم.
- فايل exe مربوطه را اجرا مي کنيم.
فصل 12
مدار الکترونیکی
برای هر اتفاقی دلیلی و برای هر معلولی علتی وجود دارد.
برایان تریسی
12.1 مقدمه
گرچه کامپیوترها تنها چند دهه است که با ما همراهند ، ولی تأثیر عمیقی روی زندگی ما داشته اند و با تاثیر تلفن، اتومبیل و تلوزیون رقابت می کنند .
همگی ما حضور آن را احساس می کنیم ، چه برنامه نویس کامپیوتر و چه دریافت کنندگان صورت حسابهای ماهیانه که توسط سیستم های بزرک چاپ شده اند .
ما در طی روز با انواع کامپیوترها برخورد می کنیم که وظایفشان را زیرکانه، آرام و کارا و حتی فروتنانه انجام می دهند که حضور آنها اغلب احساس نمی شود.
ما کامپیوتر ها را به عنوان جزء مرکزی بسیاری از فراورده های صنعتی مثل اسباب بازی ها، لباسشویی، ساعتهای آلارم ، دستگاههای تایپ و کپی و … میا بیم که در آنها کامپیوتر وظیفه ” کنترل” را در ارتباط با دنیای واقعی برای روشن و خاموش کردن وسایل و نظا رت بر وضعیت آنها انجام میدهند و میکرو کنترولرها اغلب درچنین کاربردهایی یافت می شوند .
در سال 1971 شرکت اینتل 8080 را به عنوان اولین قطعه ی خانواده ی میکرو کنترولر معرفی کرد .
در سال 1980 ، 8051 با توان بالا و ابعاد کوچک و پیچیدگی محدود توسط این شرکت معرفی شد و بعد از آن 8052 و دیگر میکروکنترولرها از این خانواده به بازار عرضه شد.
این میکرو کنترولر ها با زبان اسمبلی قابل برنامه ریزی هستند که امروزه با وجود زبانهای دیگر برنامه نویسی ، کمتر به آن توجه می شود.
زبانهای سطح بالا HLL به سرعت در حال تبدیل به زبانهای استاندارد هستند ولی در میکروکنترولرها و کاربردهای دریگر نسبت به زبان اسمبلی کدهای بیشتری را تولید می کنند که Atmel این مشکل را حل کرده .
که نتیجه ی آن میکروکنترولرهای AVR هستند که علاوه بر بهینه سازی کدها ، عملیات را تنها در یک سیکل ماشین انجام میدهند .
این امر باعث شده 12-4 بار سریعتر از میکروکنترولرهای سری 8051 باشند.
زبان های Cو BASIC بیشترین استفاده را در دنیای امروز دارند و به عنوان HLL شناخته شده اند .
تا امروز بیشتر میکروکنترولرها برای زبان اسمبلی طراحی شده و کمتر از زبانهای HLL حمایت کرده اند ولی با وجود AVR این مشکل حل شده .
کار کردن با AVR حتی برای کسانی که تخصص کافی در سخت افزار و الکترونیک ندارند ساده است و در اینجا از این chip برای ساخت یک نوع سیستم حفاظتی استفاده شده است.
12.2 خصوصیات Atmega16L
- از معماری A V R RISCاستفاده می کنند.
– کارایی بالا و توان مصرفی کم
– دارای 131دستور العمل با کارایی بالاکه اکثراً تنها در یک کلاک سیکل اجرا می شوند.
– 32*8رجیستر کاربردی.
– سرعتی تا 16 MIPS در فرکانس16 MHZ
- حافظه ، برنامه و داده ی غیر فرار
– 16Kبایت حافظه FLASHداخلی قابل برنامه ریزی.
پایداری حافظه FLASH: قابلیت 10,000 بار نوشتن و پاک کردن (WRITE/ERASE)
– 1024بایت حافظه داخلی SRAM
– 512بایت حافظه EEPROMداخلی قابل برنامه ریزی.
– پایداری حافظه EEPROM : قابلیت 100,000بار نوشتن وپاک کردن(WRITE/ERASE)
– قفل برنامه FLASH و حفاظت داده ی EEPROM
- قابلیت ارتباط JTAG(IEEE Std.)
– برنامه ریزی FLASH , EEPROM , FUSE BITS , LOCK BITS از طریق ارتباط JTAG
- خصوصیات جانبی
– دو تایمر- کانتر(TIMER/COUNTER)8بیتی باPRESCALER مجزا ومد COMPARE
– یک تایمر- کانتر(TIMER/COUNTER)16بیتی با PRESCALERمجزا ومد ودارای مدهای COMPARE ,CAPTURE
– 4کانالPWM
– 8کانال مبدل انالوگ به دیجیتال 10بیتی
8 کانال ENDED-SINGLE
دارای 7کانال تفاضلی در بسته بندی TQFP
دارای دو کانال تفاضلی با کنترل گین 1x , 10x , 200x
– یک مقایسه کننده انالوگ داخلی .
– WATCHDOG قاغبل برنامه ریزی با اسیلاتور داخلی .
– قابلیت ارتباط با پروتکل سریال دو سیمه (WIRE- TWO)
– قابلیت ارتباط سریالSPI(SERIAL PERIPHERAL INTERFACE)به صورتMASTER یا SLAVE.
– USART سریال قابل برنامه ریزی
- خصوصیات ویژه میکروکنتولر
– power- on reset circuit و brown- outقابل برنامه ریزی
– دارای شش حالت sleep ( power-down، IDLE، power-save، standby، extended standby، ADC noise reduction)
– منابع وقفه (interrupt) داخلی و خارجی
– عملکرد کلملأ ثابت
– توان مصرفی پایین و سرعت بالا توسط تکنولوژی CMOS
- توان مصرفی در 1MHZ، 3V، 25◦C، برای Atmega16l
- حالت فعال 1.1Ma(active mode)
- در حالت بی کاری0.35Ma(IDLE mode)
- در حالت power-down: 1uA
- ولتاژهای عملیاتی(کاری)
- 2.7Vتا5.5 برای (Atmega16L)
- 4.5v تا 5.5v برای (Atmwga16)
- فرکانس های کاری
- 0MHZ تا 8MHZ برای ( Atmega16L)
- 0MHZ تا 16MHZ برای (Atmega16)
- خطوطI/O و انواع بسته بندی
- 32 خط ورودی/ خروجی (I/O) قابل برنامه ریزی .
- 40 پایه PDIP، 44 پایه MLF .
LM35
LM35 یک نوع سنسور دما با خروجی آنالوگ است . بدین معنی که تغییرات دما باعث تغییرات ولتاژ در پایه خوجی آن می شود . این سنسور از سه پایه تشکیل شده که دو پایه آن به عنوان تغذیه و یک پایه آن به عنوان خروجی است.
سری های LM35 سنسورهای دما با دقت بالا هستند که خروجی آن بصورت ولتاژ خطی متناسب با
درجه سانتی گراد است و مزایای بسیار زیادی نسبت به سنسورهایی دارد که کارشان بر اساس درجه کلوین است و کاربر نیاز به تفاضل یک سری اعداد و ارقام را برای بدست آوردن دمای مورد نظر ندارد .
قیمت کم ، کالیبرا سیون بالا در LEVEL های مختلف . امپدانس خروجی کم- خطی بودن خروجی – intefarec را با هر مدار کنترل کننده یا خواننده راحت میکند.
این IC می تواند با منبع تغذیه تک و حتی با تغذیه مثبت و یا منفی کار کند و حدود 60ua جریان مصرفی آن است و بسیار کم گرم می شود و در حین کار گرمای بسیار کمتر از 0.1 ◦c تولید می کند.
LM35 طراحی شده برای کار در رنج -55_ 150◦c است.
12.3 مقدمه ای بر پورت پارالل درالکترونیک
12.3.1 تاریخچه
از اولین روزهای مخابرات که انسان به وسیله ی چاپار، نور ، دود ، و پرچم های رنگی پیام خود را ارسال می کرد ، همواره به دنبا ل روشهایی بوده که بتواند پیام را سریعتر و راحت تر به مقصد ارسال کند .
این افزایش تقاضا برای ارسال پیام ، موجب اختراع روش های بسیار گردید که میتوان اختراع الفبای مورس و تلگراف در سال 1844 را پایه ای برای مخابرات نوین امروزی دانست.
پورت پرینتر یکی از ارزانترین و هنوز راهی قدرتمند برای مباحث پروژه های اجرایی برای کنترل دنیای پیرامون است .
پورت پرینتر 8 خروجی TTL را فراهم میکند ، 5 ورودی و 4 هدایت دو طرفه و همچنین استفاده ساده برای بکار گیری وقفه ها را مهیا میکند .
در این قسمت بحث روی روی قسمتهای مختلف پورت پرینتر است .
هر پورت پرینتر شامل 3 پورت آدرسینگ است . که به ترتیب دیتا، حالت و کنترل هستند .
اگر پورت د یتا در آدرس 0x0378 است ، پورت حالت (status) در آدرس 0x0379 , و پورت کنترل در آدرس 0x037A است .
Printer Data Port Status Control
LPT1 0x03bc 0x03bd 0x03be
LPT2 0x0378 0x0379 0x037a
LPT3 0x0278 0x0279 0x027a
در این مدار نیاز است که برخی اطلاعات کنترلی میکروکنترلی جهت عکس برداری و ذخیره آن و تشخیص جنسیت به کامپیوتر منتقل شود.
بدین ترتیب نیاز است که به کامپیوتر 2 مورد را که 1- فعال شدن سیستم 2- حضور شخص در محل ، منتقل شود که در اینجا از دو بیت درکاه ورودی برای این منظور استفاده شده است .
پایه های 10-11-12-13 و 15 به عنوان پایه های ورودی در پورت پرینتر تعبیه شده که ما در اینجا تنها نیاز به 2 بیت داریم .
اطلاعات مربوطه را به پایه های 13 و 15 ارسال کرده ایم و پایه ی 18 به عنوان زمین در نظر گرفته شده است .
شمای کلی مدار
این سیستم که هسته ی آن یک میکروکنترولر است ، دارای یک سنسور LM35 به عنوان سنسور حرارت جهت سنجش دما و یک چشم الکترونیکی جهت تشخیص هر گونه تغییرات در محل است .
چشمی
تغذیه چشم الکترونیکی 12V است که خروجی آن ACTIVE LOW است ، یعنی در صورت مشاهده ی تغییرات ، پالس منفی به میکروکنترولر می فرستد .
این بدین دلیل است که اگر در موقع فعال بودن مدار سیم ارتباط میکرو و چشم قطع شد مدار تصمیمات لازم را بگیرد .
خازنی بین خروجی و زمین آن وصل شده که خروجی چشم را همواره HIGH نگاه میدارد و اثرات نویز را بر مدار از طریق چشم از بین می برد .
این خازن همیشه توسط خط مثبت (خروجی) شارژ است ، در صورتی که خروجی متاثر از نویز برای لحظه ای کوتاه صفر شود ، شارژ خازن ، ولتاژ را تامین کرده و اجازه LOW شدن را به خروجی نمی دهد.
12.4 LM35
LM35 یک سنسور با خروجی آنالوگ است و با توجه به امکانات ویژه ی این میکروکنترولر میتوان از برخی پورتها به عنوان A/D استفاده کرد.
خروجی LM35 به پایه ی 40(PA0) اعمال شده . این پایه امکان A/D را دارا میباشد و با یک تقسیم بر 5 ساده میتوان به دمای مورد نظر بر حسب سانتی گراد دست یافت .
12.5 RESTE SWITCH
SWITHCH کوچکی در این مدار تعبیه شده که امکان دسترسی مستقیم و بدون نیاز به قطع و وصل کردن تغذه ی مدار را به کاربر می دهد . بدین ترتیب در صورت بروز هر گونه مشکل کارر می تواند با فشردن این switch سیستم را reset کند
LED 12.6
3 LED در این مدار تعبیه شده که جهت نشان دادن ACTIVE بودن هر قسمت به پایه های میکروکنترولر وصل شده اند.
ACTIVE LED : در صورت روشن بودن سیستم و وارد کردن صحیح password در ابتدای کار LED روشن میشود و نشان دهنده ی این است سیستم فعال است .
TEMP LED : در صوت بالا رفتن دما به بیش از 50◦c این LED روشن شده و نشان میدهد که دمای محیط بیش از حد است و متناسب با آن آژیر نیز فعال میشود .
EYE LED : در صورت تشخیص هر گونه تغییر در محل این LED روشن شده و متناسب با آن آزیر نیز فعال می شود.
از EYE LED و ACTIVE LED به پایه های 13 و 15 پورت پارالل پرینتر وصل شده که بدین وسیله می توان به کامپیوتر ارتباط برقرار کرد و دیتای مربوطه را که نشان دهنده ی 1. فعال بون سیستم 2. خاموش بودن سیستم 3. فعال بودن سیستم و چشم را به کامپیوتر ارسال کرد .
LED های مربوطه با مقاومت 470 اهم سری شدهاند که جهت کاش ولتاژ روی LED ها استفاده می شوند .
12.7 KEY BOARD
Key board این مدار 3*4 است ، یعنی دارای 12 کلید است . 10 شماره ، start ، stop . به وسیله ی این کلید ها می توان pass word را به سیستم اعمال کرد . بدین صورت که در ابتدا پس از روشن کردن سیستم با زدن دکمه ی start ، تقاضای خود را جهت فعال و یا غیر فعال کردن سیستم به سیستم ارسال می کنیم .
در این هنگام کلمه ی pass word: روی lcd ظاهر خواهد شد .بدین ترتیب با زدن password مورد نظر (1234) و زدن مجدد start جهت تأ یید password مدار فعال خواهد شد .
در صورتی که password غلط وارد شد متوان با فشردن دکمه ی stop جهت اقدام به وارد کردن مجدد password اقدام کرد .
12.8 بلند گو
بلند گوی این مدار یک بیزر 8 اهمی است که در اینجا فقط برای آزمایش گذاشته شده .
می توان با یک مدار تقویت کننده ، خروجی میکرو کنترولر را به بلندگوهایی با توان های بالاتر اعمال کرد.
12.9 برنامه پروژه
“regfile = “m16def.dat”
crystal = 8000000
*********** configoration ******
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = Pinb.7 , Rs = Pinb.2 ,
E = Pinb.
Config Lcd = 16 * 2
Config Pind.6 = Input ‘eye in put
Config Pind.5 = Output ‘buzzer out put
Config Pind.4 = Output ‘voltage out put
Config Pind.3 = Output
Config Pind.2 = Output
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Kbd = Portc
******* make up system *********
Deflcdchar 0 , 32 , 14 , 10 , 14 , 32 , 32 , 32 , 32 ‘ replace ? with number 0-7
Dim W As Byte , Buzzer As Byte , Delay2 As Integer , C As Bit
Dim Key1 As Byte , Key2 As Byte , Key3 As Byte , Key4 As Byte , Key As Byte
Declare Sub Buzzer
Declare Sub Temp
Declare Sub Eye
Declare Sub Hot
Declare Sub Getkey
Declare Sub Startkey
Declare Sub Chenger
Declare Sub Startprogram
Start Adc
Cursor Off
Set Portd.6
Reset Portd.3
Reset Portd.4
Reset Portd.2
C = 0
******* main program ******
Do
Cls : Lcd “HI”
Call Getkey
Call Startkey
Loop
End
*********** START PROGRAM ********
Sub Startprogram
Key1 = 20 : Key2 = 20 : Key3 = 20 : Key4 = 20
Set Portd.2 : Reset Portd.3 : Reset Portd.4 : Reset Portd.5
Do
Call Temp
Call Hot
Call Eye
Loop
End Sub
********* TEMPRATOR PROGRAM *****
Sub Temp
Waitms 500
:” Cls : Home : Lcd “TEMP
( W = Getadc(0
W = W / 5
Locate 2 , 1
Lcd W : Lcd Chr(0) : Lcd “C”
End Sub
*********** HOT PROGRAM ********
Sub Hot
If W > 50 Then
Set Portd.4
Call Buzzer
End If
End Sub
‘************** EYE PROGRAM *******
Sub Eye
: If Pind.6 = 0 Then
Set Portd.3
Call Buzzer
End If
End Sub
*********** buzzer *********
Sub Buzzer
C = 1
For Delay2 = 0 To 100
Call Temp
For Buzzer = 0 To 200
Toggle Portd.5
Waitus 200
Next Buzzer
Call Getkey
Call Chenger
For Buzzer = 0 To 200
Toggle Portd.5
Waitus 200
Next Buzzer
Call Startkey
For Buzzer = 0 To 200
Toggle Portd.5
Waitus 200
Next Buzzer
Next Delay2
Reset Portd.3
Reset Portd.4
Waitms 500
End Sub
***************key***********
Sub Getkey
Key:
Key = Getkbd() : Call Chenger
If Key <> 11 Then : Goto Endgetkey : End If
Clean:
:” Cls : Home : Lcd “PASSWORD
Locate 2 , 1
Key1:
Key = Getkbd() : Call Chenger
If Key > 10 Then : Goto Key1 : End If
Key1 = Key
Lcd Key1
Key2:
Key = Getkbd() : Call Chenger
If Key > 10 Then : Goto Key2 : End If
Key2 = Key
Lcd Key2
Key3:
Key = Getkbd() : Call Chenger
If Key > 10 Then : Goto Key3 : End If
Key3 = Key
Lcd Key3
Key4:
Key = Getkbd() : Call Chenger
If Key > 10 Then : Goto Key4 : End If
Key4 = Key
Lcd Key4
Mainkey:
Key = Getkbd() : Call Chenger
If Key <> 11 Then : Goto Mainkey : End If
Endgetkey:
End Sub
*********** chenge key **********
Sub Chenger
Waitms 300
If C = 1 Then
For Buzzer = 0 To 200
Toggle Portd.5
Waitus 200
Next Buzzer
End If
If Key = 0 Then : Key = 3 : Goto Endkey : End If
If Key = 1 Then : Key = 2 : Goto Endkey : End If
If Key = 2 Then : Key = 1 : Goto Endkey : End If
If Key = 4 Then : Key = 6 : Goto Endkey : End If
If Key = 6 Then : Key = 4 : Goto Endkey : End If
If Key = 8 Then : Key = 9 : Goto Endkey : End If
If Key = 9 Then : Key = 8 : Goto Endkey : End If
If Key = 10 Then : Key = 7 : Goto Endkey : End If
If Key = 12 Then : Key = 10 : Goto Clean : End If
If Key = 13 Then : Key = 0 : Goto Endkey : End If
If Key = 14 Then : Key = 11 : Goto Endkey : End If
Endkey :
End Sub
*********** start key *********
Sub Startkey
If Key1 = 1 Then
If Key2 = 2 Then
If Key3 = 3 Then
If Key4 = 4 Then
Goto Startprogram
End If
End If
End If
End If
End Sub
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.