آشنايي با نحوه نمايش، وارسي و تحليل تصاوير

آشنايي با نحوه نمايش، وارسي و تحليل تصاوير

دستور imshow

يك راه استفاده از دستور imshow:(ابتدا تصوير را بخوانيد و سپس آن را نمايش دهيد)

moon = imread('moon.tif'); imshow(moon);

راه ديگر: نام فايل را مستقيماً ذكر كنيم :

imshow('moon.tif');

البته اين راه باعث نمي‌شود كه داده‌هاي عددي تصوير به فضاي كاري متلب منتقل شود؛ براي اين كار بايد از دستور getimage استفاده كنيد:

moon = getimage;

در حالت پيش فرض، دستورimshow يك تصوير با بزرگ نمايي 100% (یعنی به ازای هر پیکسل از تصویر يك پيكسل از صفحه نمايش كامپيوتر متناظر مي‌شود) نمایش می‌دهد. اگر بخواهيد اين پيش فرض را تغيير دهيد (مثلاً با بزرگ نمايي150 %):

pout = imread('pout.tif'); imshow(pout, 'InitialMagnification', 150)

اگر بخواهيد تصوير متناسب با ابعاد فعلي پنجره موجود نمايش داده شود، از مقدار 'fit'به جاي مقدار عددي بزرگ نمايي استفاده كنيد.

اگر بخواهيد مقدار پيش فرض بزرگنمایي را تغيير دهيد ابتدا پنجره‌ي مكالمه‌ي جعبه ابزار پردازش تصوير را با اجراي دستور iptprefs فراخواني كرده و سپس مقدار پارامتر ImshowInitialMagnification را تغییر دهید.

هنگام نماي يك تصوير، يك نوار خاكستري رنگ دور تصوير را احاطه كرده است:

اگر بخواهيد اين نوار حذف شود، مقدار پارامتر Border در دستور imshow را برابر tight قرار دهید:

imshow('moon.tif','Border','tight')

اگر بخواهيد هميشه و براي تمام نمايش‌ها، نوار مذكور حذف شود، از همان پنجره مكالمه‌ي جعبه ابزار پردازش تصوير، مقدار پارامتر ImshowBorder را برابر tight قرار دهید.

اگر بخواهيد در يك پنجره چند تصوير نمايش دهيد بايد ابتدا به كمك دستور subplot پنجره را به چند زيرپنجره تقسيم كنيد و سپس از دستور imshow و يا دستور subimage براي نمايش تصوير استفاده كنيد.

دستورsubimage بهتر از imshow عمل می‌کند. توجه کنید:

[X1,map1]=imread('forest.tif'); [X2,map2]=imread('trees.tif'); subplot(1,2,1), imshow(X1,map1) subplot(1,2,2), imshow(X2,map2)

[X1,map1]=imread('forest.tif'); [X2,map2]=imread('trees.tif'); subplot(1,2,1), subimage(X1,map1) subplot(1,2,2), subimage(X2,map2)

دستور imtool

سه راه براي خواندن يك تصوير به كمك دستورimtool:

راه اول: ابتدا دستور imtool را به تنهايي اجرا كرد و در پنجره ظاهر شده، از منوي file گزینه open یا گزینه‌ی Import from workspace را انتخاب كنيد (بستگي به محل تصوير مورد نظرتان).

راه دوم: آن را به همراه نام تصوير فراخواني كنيد

moon = imread('moon.tif'); imtool(moon)

راه سوم: مشابه راه دوم است:

imtool('moon.tif');

براي تغيير بزرگ نمايي از مقدار پيش فرض % 100:

pout = imread('pout.tif'); imtool(pout, 'InitialMagnification', 150)

در اينجا هم مي‌توانيد از مقدار'fit' استفاده كنيد.

دنباله‌هاي تصويري

براي پخش دنباله‌هاي تصويري مي‌توان ازMovie Player استفاده كرد.
مثال:

1- بارگذاري دنباله‌ي تصويري به فضاي كاري متلب

>>load mristack

در فضاي كاري متغيري به نام mristack ظاهر مي‌شود كه آرايه‌اي شامل 21 فریم 256 در 256 و از نوع uint8 است.

mristack 256x256x21 1276256 uint8

2- پخش دنباله تصويري درMovie Player به كمك دستور implay( نام دنباله را به عنوان آرگومان ورودی می‌دهیم ) :

implay(mristack)

حال با ابزارهاي پخش موجود در پنجره ظاهر شده مي‌توانيد فريم به فريم يا به صورت انيميشن، دنباله را ببينيد.همچنين به اطلاعاتي كه در اطراف پنجره مهيا شده است توجه كنيد.

براي تغيير نرخ نمايش فريم (تعداد فريم‌ها در ثانيه ) از منويPlayback گزينه‌ي Frame Rate را انتخاب كنيد يا اينكه كليدT را فشار دهید.

براي اعمال يك ماتريس رنگ به تصاوير سطح خاكستري از منوي Tools گزينه‌ي colormap را انتخاب کنید یا اینکه دکمه C را فشار دهید.

هرگاه بخواهيد تصاوير موجود در يك آرايه چند بعدي را يك‌جا كنار هم داخل يك پنجره ببينيد از دستور montage استفاده كنيد.

onion = imread('onion.png'); onionArray = repmat(onion, [ 1 1 1 4 ]); montage(onionArray);

دستورrepmat(A,m,n,p,q) از روی ماتریس A یک ماتریس بزرگتر می‌سازد که در جهت بعد اول A را m بار کپی می‌کند و در جهت بعد دوم A را n بار کپی می‌کند، در جهت بعد سوم A را P بار کپی می‌کند و بالاخره در جهت بعد چهارم A را q بار کپی می‌کند. تعداد پارامترهای m , n, ... دلخواه می‌باشد.دستور repmat در مثال فوق، يك آرايه‌ي چهار بعدي مي‌سازد (يعني يك آرايه چند بعدي) تا به عنوان دنباله‌اي از تصاوير محسوب شود.

تبديل يك تصوير چندفريمي به فيلم

از تابع immovie مي‌توان براي تبديل يك تصوير چند فريمي به فيلم استفاده كرد. مثلاً براي تبديل يك تصوير چندفريمي انديس گذاري شده به فيلم به صورت زير عمل كنيد:

mov = immovie(X,map);

حال از دستور implay برای پخش فیلم استفاده کنید.

Implay(mov);

مثال زير يك فايل tif به نام mri.tif را خوانده و در یک تصوير چندفريمي (همان آرايه چندبعدي) ذخيره مي‌كند. سپس اين تصوير چندفريمي به فيلم تبديل شده و در انتها پخش مي‌شود:

mri = uint8(zeros(128,128,1,27)); for frame=1:27 [mri(:,:,:,frame),map] = imread('mri.tif',frame); end mov = immovie(mri,map); implay(mov);

براي توليد فيلمي كه در خارج از متلب هم قابل پخش باشد بايد فيلمي از نوع avi بسازید. دو راه برای این کار وجود دارد:

1-از دستورات avifile و addframe استفاده کنید.

2- یا اینکه از دستور movie2avi استفاده کنید.

توجه كنيد كه مي‌توانيد به كمك تصاوير انديس گذاري شده و یا RGB از نوع uint8 و یا double باشند یک فیلم avi بسازید.

نمايش تصاويرانديس گذاري شده

يك تصوير انديس گذاري شده شامل يك ماتريس تصوير و يك ماتريس رنگ است. عناصر ماتريس تصوير در حقيقت اشاره گرهايي به درون ماتريس رنگ مي‌باشند. براي نمايش چنين تصاويري بايد هر دو ماتريس را در دو دستور imshow و یا imtool ذکر کنیم.

imshow(X,map)imtool(X,map)

اگر نوع عناصر ماتریس تصویر برابر double باشد، مقدار 1 در ماتریس تصویر به اولين سطر ماتريس رنگ، مقدار 2 به دومين سطر و همين طور الي آخر اشاره دارد. اما اگر نوع عناصر ماتريس تصوير برابر uint8 و یا uint16 باشد، مقدار 0 به اولين سطر ماتريس رنگ، مقدار 1 به دومين سطر و همين طور الي آخر اشاره دارد. اگر در ماتريس تصوير عنصري بزرگتر از تعداد سطرهاي ماترسي رنگ وجود داشته باشد (يعني سطر معادل آن وجود نداشته باشد)، از آخرين سطر ماتريس رنگ استفاده مي‌شود.

نمايش تصويري كه مقادير آن خارج از بازه معمول است

فرض كنيد تصويري داريد كه مقادير آن خارج از بازه متداول است؛ يعني:

1- بازه [0,1] برای نوع‌های single و double

2- بازه [0,255] برای نوع uint8

3- بازه [0,65535] برای نوع‌های uint16

4- بازه [ 0,32768,32767] برای نوع uint16

چنين تصوير ممكن است براي مثال، حاصل فيلتر كردن يك تصوير نرمال (يعني با مقادير در بازه معمول) باشد. براي نمايش چنين تصاويري، بازه تغييرات را در دستور imshow و یا دستور imtool ذکر کنید. به صورت زیر:

imshow(I,'DisplayRange',[low high]) imtool(I,'DisplayRange',[low high])

اگر محدوده بالا و پايين را ذكر نكنيد و فقط از [] استفاده كنيد، محدوده مناسب به طور خودكار تعيين مي‌شود. به مثال زير توجه كنيد (در شكل خاصل توجه كنيد كه محدوده تغييرات تصوير ذكر شده است):

I = imread('testpat1.png'); J = filter2([1 2;‐1 ‐2],I); imtool(J,'DisplayRange',[]);

نمايش تصاوير باينري

تصاوير باينري از نوع logical هستند. اگر مي‎‌خواهيد كه تصويرتان به عنوان يك تصوير باينري توسط توابع جعبه ابزار پردازش تصوير تلقي شود، بايد عناصر ماتريس تصوير از نوع logicla تعريف شده باشند.

مثالي از خواندن يك تصوير باينري:

BW = imread('circles.png'); imshow(BW) or imtool(BW)

اگر مي‌خواهيد جاي رنگ‌هاي سياه و سفيد تصوير باينري نمايش‌داده‌ شده عوض شود، از علامت ~ قبل از نامه تصوير استفاده كنيد. اين علامت، همان علامت نقيض (يا متمم) است كه مقدار 0 را به 1 و مقدار 1 را به 0 تبديل مي‌كند:

همچنين مي‌توانيد با آدرس‌دهي به شيوه‌ي تصاوير انديس گذاري شده، يك تصوير باينري را به صورت رنگي نمايش دهيد. براي مثال، دستور زير براي رنگ سياه از رنگ قرمز و به جاي رنگ سفيد از رنگ آبي استفاده مي‌كند:

imshow(BW,[1 0 0; 0 0 1]) or imtool(BW,[1 0 0; 0 0 1])

نمايش تصاوير رنگي

از دستور imshow استفاده می‌شود.

RGB = imread(`peppers.png'); imshow(RGB) or imtool(RGB)

نكته: اگر يك تصوير رنگي را نمايش داديد اما به صورت سطح خاكستري نمايش داده‌شد، آن تصوير به صورت انديس گذاري شده بوده و شما بايد از ماتريس رنگ نيز در كنار ماتريس تصوير استفاه كنيد.

نمايش ميله رنگ

هدف از يك ميله‌ي رنگ 26 نشان دادن محدوده سطوح مختلف روشنايي و نيز رنگ متناظر با هر سطح روشنايي در نمايش تصوير است. براي اضافه كردن يك ميله رنگ بايد ابتدا از دستور imshow برای نمایش تصویر استفاده کنید و سپس از دستورcolorbar استفاده کنید.

يكي از موارد استفاده از ميله رنگ، زماني است كه تصويري در اختيار داريد كه بنا به دلايل مختلف محدوده‌ي مقاديري خارج از محدوده معمول (مثلاً خارج از بازه صفر تا 255 ) دارد. در مثال زير، تصوير ورودي فيلتر شده و بنابراين، مقادير پيكسل‌هاي تصوير خروجي خارج از بازه‌ي نوعِ uint8 است.

RGB = imread('saturn.png'); I = rgb2gray(RGB); h = [1 2 1; 0 0 0; ‐1 ‐2 ‐1]; I2 = filter2(h,I); imshow(I2,'DisplayRange',[]), colorbar

چاپ تصوير

براي چاپ يك تصوير از دستورprint می‌توانید استفاده کنید. (علاوه بر استفاده از منوهای استاندارد موجود)


نظرات کاربران



عبارت امنیتی : حاصل 4 × 3 می شود :
متن پیام :