تا به حال تصويرهاي Gray Scale را بررسي کرديم. از اين به بعد هم همين کار را ميکنيم! با اين تفاوت که اگر تصوير ورودي رنگي بود اول Gray Scaleاش ميکنيم و بعد کارها را ادامه مي دهيم.
تصوير flowers.tif را با دستور imread در ماتريس flowers ذخيره کنيد. از دستور rgb2gray براي تبديل فرمت رنگي تصوير به Gray Scale استفاده کنيد. حالا هيستوگرام تصوير را رسم کنيد. بعد يکي از قلههاي نمودار هيستوگرام را انتخاب کنيدکه بين دوتا دره باشد. کاري کنيد که فقط اين قله درون هيستوگرام باقي بماند. بعد با دستور im2bw تصوير را از Gray Scale به سياه سفيد تبديل کنيد و نتايج را مقايسه کنيد!
چطور شد؟ توضيح ميدهم، اينطوري:
flowers=imread('flowers.tif','tif');
flowersgray=rgb2gray(flowers);
imhist(flowersgray)
من هيستوگرام را نگاه کردم و شما هم نگاه کنيد. (هيستوگرام تصوير را بادستور imhist کشيدم) قله بين 50 و 100 را انتخاب ميکنم. حالا يک ماتريس جديد ميسازم طوري که فقط جاهايي که مقدار ماتريس flowersgray در محدوده 50 تا 100 است، در ماتريس جديد 0 باشد و باقي جاها 1 باشد.(يعني يک ماتريس باينري يا سياه سفيد):
f=ones(size(flowersgray));
f(find(flowersgray>50&flowersgray<100))=0;
imshow(f)
دستورهاي بالا به اين معني است: ماتريس f را هماندازه ماتريس flowersgray بساز. همه درايههايش را يک بگذار. بعد دستور find درون ماتريس flowersgray جستجو ميکند و شماره درايههايي از ماتريس flowersgray را به من ميدهد که در شرط روبهرو برايش مشخص شده. (همان محدوده 50 تا 100). اين درايههاي بخصوص را در ماتريس f از 1 به 0 تبديل ميشود. نتيجه را باهم ببينيم!
اگر دقت کنيم ميبينيم که مجموعه گلدان از پس زمينه جدا شد. آنهم تنها با انتخاب يک قله درون هيستوگرام... حالا من از کجا فهميدم که اين قله مهم است؟... لابد علم غيب داشتم؟... بعدا راجع به انتخاب قلهها بيشتر خواهيم فهميد.
حالا دستور im2bw را - که تصوير را سياه سفيد ميکند - امتحان کنيد.
bwflowers=im2bw(flowersgray,gray);
imshow(bwflowers)
دستور im2bw حدي تعيين ميکند و درايههايي که از آن حد کمتر باشند را صفر و آنهايي که بيشتر هستند را يک ميکند. آيا متوجه تفاوت دو روش شدهايد؟ اگر به جاي گلدان در تصوير مورد نظر، عکس پرسنلي افراد بود چه اشکالي در روش im2bw وجود داشت؟
دستورات معرفي شده: rgb2gray, imhist, ones, find