[آموزش] پردازش تصویر و کار با عکس ها، در متلب

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب این تاپیک:

  1. باز کردن عکس های درون ویندوز با متلب
  2. وارد کردن عکس های ویندوز به درون متلب
  3. تغییر اندازه یک تصویر با دستور imresize در متلب
  4. به دست آوردن جمع دو تصویر با دستور imadd در متلب
  5. به دست آوردن تفریق دو تصویر با دستور imsubtract در متلب
  6. به دست آوردن مکمل یک تصویر با دستور imcomplement در متلب
  7. مشاهده میزان به کار رفته از هر رنگ در یک تصویر با دستور imhist در متلب
  8. افزایش کنتراست یک تصویر با دستور histeq در متلب
  9. مشاهده اطلاعات مربوط به یک تصویر با دستور imfinfo در متلب
  10. پردازش عکس های با پسوند bmp در متلب
  11. تبدیل یک عکس به عکس باینری (binary) (پیکسل ها تنها دارای مقادیر 0 و 1)، با دستور im2bw در متلب
  12. نمایش عکس در یک پنجره با گزینه های کاربردی بیشتر (مثل تعیین کد معادل رنگ نقطه ها، تعیین فاصله بین دو نقطه، ابزار crop و ...)، با دستور imtool در متلب
  13. استفاده از عکس های داخلی نرم افزار متلب (همراه خود نرم افزار متلب) برای آزمایش کدهای پردازش تصویر (عدم نیاز به فراهم کردن عکس های جدید)


منبع: kelidestan.com
 

P O U R I A

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

باز کردن عکس های درون ویندوز با متلب

فایل های عکس درون ویندوز را به دو روش می توانیم باز کنیم. روش اول این است که فایل در درون خود نرم افزار متلب باز شود که برای مواردی مفید است که بخواهیم با دستوراتی، تغییرات مورد نظر خود را بر عکس اعمال کنیم. روش دوم این است که عکس توسط برنامه ای باز شود که خود ویندوز برای آن نوع فایل تعیین کرده است که این مورد نیز می تواند در ساخت برنامه های کاربردی توسط متلب، مفید واقع شود.در ادامه، دستورات مربوط به این دو روش را شرح خواهیم داد.


[h=2]باز کردن عکس به وسیله خود نرم افزار متلب :[/h]چنانچه بخواهیم که عکس به وسیله خود نرم افزار متلب باز شود، باید از دستور open استفاده کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]open[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'c:\1.jpg'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]متلب پنجره ای را باز کرده و عکس مورد نظر را نمایش می دهد.


[h=2]باز کردن عکس به وسیله نرم افزارهای ویندوز :[/h]چنانچه بخواهیم عکس یا هر فایل دیگر در برنامه ای باز شود که ویندوز برای آن مشخص کرده است (نه در نرم افزار متلب)، باید از دستور winopen استفاده کنیم. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]winopen[COLOR=#008800]([/COLOR][COLOR=#A020F0]'c:\1.jpg'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]عکس 1.jpg در برنامه ای که ویندوز برای باز کردن عکس ها مشخص کرده است، باز می شود. دقت کنید که آدرس محل عکس را بین دو علامت ' گذاشته ایم.
 

P O U R I A

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

وارد کردن عکس های ویندوز به درون متلب

فرض کنید در یکی از درایوهای ویندوز خود، عکسی دارید که می خواهید به وسیله نرم افزار متلب، بر روی آن عکس، تغییراتی را اعمال کنید. مسلما قبل از هر چیز، نیاز دارید که آن عکس را در نرم افزار متلب وارد کنید. برای این منظور می توانید از هر یک از روش های زیر اقدام کنید :

[h=2]روش اول :[/h]در پنجره اصلی متلب، بر روی گزینه Open file (به شکل
) کلیک کنید. در پنجره ای که باز می شود، گزینه Files of type برابر All MATLAB files قرار داده شده است، باید این گزینه را به All Files تغییر دهید تا بتوانید هر نوع فایلی را انتخاب کنید (مثلا عکسی با فرمت jpeg). سپس فایل خود را یافته و بر روی گزینه Open کلیک کنید. پنجره ای به شکل زیر باز می شود :
matlab13.jpg
در این مرحله، متلب می خواهد اطلاعات عکس شما را در متغیری ذخیره کند. اگر نام عکس شما یک نام مجاز برای متلب باشد، متلب همان نام را برای متغیر انتخاب می کند و اگر نام، غیر مجاز باشد، متلب آن را تغییر می دهد. مثلا اگر عکسی با نام 1.jpeg را انتخاب کرده باشید، متلب نام x1 را برای متغیر انتخاب می کند.شما می توانید بر روی نام انتخاب شده، دو بار کلیک کنید و نامی دیگر را انتخاب نمایید. پس از انتخاب نام مورد نظر خود، بر روی گزینه Finish کلیک کنید تا پنجره بسته شود.برای آن که عکس خود را در متلب مشاهده کنیم، دستور زیر را اجرا می کنیم (برای متغیر با نام x1) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]image[/COLOR][COLOR=#008800]([/COLOR]x1[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]title[/COLOR] [COLOR=#A020F0]'x1'[/COLOR] 
[COLOR=#0000FF]axis[/COLOR] off          
[COLOR=#0000FF]axis[/COLOR] [COLOR=#0000FF]image[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]نرم افزار متلب، پنجره ای را باز کرده و عکس مورد نظرمان را نمایش می دهد.


[h=2]روش دوم : استفاده از دستور imread[/h]در این روش نیز اطلاعات عکس در متغیری ذخیره خواهد شد و تنها تفاوت با روش قبل این است که باید آدرس عکس مورد نظر را به طور دقیق در دستور imread بنویسید. به مثال زیر توجه کنید :[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A = [COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'c:\1.jpg'[/COLOR][COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]متلب متغیری با نام A ایجاد می کند که حاوی اطلاعات عکس می باشد. برای مشاهده عکس در متلب، کدهای زیر را اجرا می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]image[/COLOR][COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]title[/COLOR] [COLOR=#A020F0]'A'[/COLOR] 
[COLOR=#0000FF]axis[/COLOR] off          
[COLOR=#0000FF]axis[/COLOR] [COLOR=#0000FF]image[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]متلب پنجره ای را باز کرده و عکس را نمایش می دهد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تغییر اندازه یک تصویر با دستور imresize در متلب

تغییر اندازه یک تصویر با دستور imresize در متلب

با استفاده از دستور imresize در متلب، می توانیم اندازه یک تصویر را تغییر بدهیم. با دستور imresize ، می توانیم تعیین کنیم که اندازه تصویر تا چه اندازه بزرگتر یا کوچکتر شود. دستور imresize را می توانیم به چندین روش مختلف به کار ببریم. این روش ها را در ادامه توضیح می دهیم.

تغییر اندازه بر اساس ضریبی از اندازه تصویر اولیه :

با فرض اینکه اطلاعات تصویر، در متغیر image ذخیره شده باشد، آنگاه چنانچه دستور imresize را به صورتimresize(image,A) به کار ببریم، که در آن A یک ضریب عددی است، آنگاه دستور imresize ، تصویر image را به اندازه ضریب A ، بزرگتر یا کوچکتر می کند. اگر ضریب A بین 0 تا 1 باشد، آنگاه تصویر حاصل، از تصویر image ، کوچکتر خواهد بود و چنانچه ضریب A ، بزرگتر از 1 باشد، آنگاه تصویر حاصل، از تصویر image ، بزرگتر می شود. به مثال زیر توجه کنید :

مثال :

کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
[COLOR=#0000FF]image[/COLOR]=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'friend.jpg'[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR][COLOR=#0000FF]image[/COLOR][COLOR=#008800])[/COLOR]
 
image_new=imresize[COLOR=#008800]([/COLOR][COLOR=#0000FF]image[/COLOR],[COLOR=#3333FF]0.5[/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]image_new[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا تصویری با نام friend.jpg را با دستور imread ، در نرم افزار متلب وارد می کنیم و آن را با دستور imshow ، نمایش می دهیم. سپس با دستور imresize ، اندازه تصویر را به نصف کاهش می دهیم (ضریب برابر با 0.5 انتخاب شده است). در پایان، تصویر حاصل شده (با نام image_new) را با دستور imshow نمایش داده ایم. دستور figure ، برای باز شدن یک پنجره مخصوص شکل جدید است تا در انتها، هر دو تصویر را داشته باشیم.

نتیجه :

تصویر اولیه به صورت زیر می باشد :matlab-194.jpg
و تصویر کوچک شده، به صورت زیر :

matlab-195.jpg


تغییر اندازه بر اساس تعداد ردیف ها و ستون های ماتریس اطلاعات تصویر ثانویه :

می توانیم اندازه تصویر ثانویه را بر اساس تعداد ردیف ها و تعداد ستون های ماتریس مربوط به آن، تعیین کنیم. برای این منظور، باید از دستور imresize ، به صورت imresize(image, [numrows numcols]) استفاده کنیم که در آن، پارامتر numrows برابر تعداد ردیف ها و پارامتر numcols برابر تعداد ستون های مورد نظر ما برای ماتریس مربوط به تصویر ثانویه می باشد. همان مثال قبل را این بار با این روش می نویسیم :

مثال :

کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
[COLOR=#0000FF]image[/COLOR]=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'friend.jpg'[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR][COLOR=#0000FF]image[/COLOR][COLOR=#008800])[/COLOR]
 
image_new=imresize[COLOR=#008800]([/COLOR][COLOR=#0000FF]image[/COLOR],[COLOR=#008800][[/COLOR][COLOR=#3333FF]200[/COLOR],[COLOR=#3333FF]80[/COLOR][COLOR=#008800]][/COLOR][COLOR=#008800])[/COLOR]
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]image_new[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
تعداد ستون ها را عمدا، کمتر از تعداد ردیف ها، انتخاب کرده ایم تا تصویر در جهت افقی، فشرده تر شود.

نتیجه :

تصویر اولیه به صورت زیر می باشد :matlab-196.jpg
و تصویر کوچک شده، به صورت زیر :
matlab-197.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن جمع دو تصویر با دستور imadd در متلب

به دست آوردن جمع دو تصویر با دستور imadd در متلب

با استفاده از دستور imadd در متلب، می توانیم دو تصویر را با هم جمع کنیم. منظور از جمع کردن دو تصویر این است که رنگ هر پیکسل تصویر نهایی، از جمع شدن مقدار مربوط به رنگ پیکسل متناظر در دو تصویر اولیه به دست می آید. در واقع چون رنگ هر پیکسل تصویر با یک عدد در متلب ذخیره می شود، با جمع زدن اعداد مربوط به دو تصویر، می توانیم یک تصویر به صورت مجموع آن دو تصویر اولیه بسازیم. باید دقت داشته باشید که اندازه دو تصویر یکسان باشد تا بتوانید از دستور imadd ، برای جمع زدن آن دو، استفاده کنید. به مثال زیر توجه کنید :

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
img_1=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image_1.jpg'[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]img_1[COLOR=#008800])[/COLOR];
 
img_2=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image_2.jpg'[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]img_2[COLOR=#008800])[/COLOR];
 
img_3=imadd[COLOR=#008800]([/COLOR]img_1,img_2[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]img_3[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
نتیجه :

تصویر اول :matlab-198.jpg
تصویر دوم :matlab-199.jpg
تصویر حاصل از جمع دو تصویر :

matlab-200.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن تفریق دو تصویر با دستور imsubtract در متلب

به دست آوردن تفریق دو تصویر با دستور imsubtract در متلب

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

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
img_1=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image_1.jpg'[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]img_1[COLOR=#008800])[/COLOR];
 
img_2=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image_2.jpg'[/COLOR][COLOR=#008800])[/COLOR];
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]img_2[COLOR=#008800])[/COLOR];
 
img_3=imsubtract[COLOR=#008800]([/COLOR]img_1,img_2[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]img_3[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
نتیجه :

تصویر اول :matlab-201.jpg
تصویر دوم :matlab-202.jpg
تصویر حاصل از تفریق دو تصویر :

matlab-203.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
به دست آوردن مکمل یک تصویر با دستور imcomplement در متلب

به دست آوردن مکمل یک تصویر با دستور imcomplement در متلب

با استفاده از دستور imcomplement در متلب، می توانیم مکمل یک تصویر را به دست بیاوریم. برای درک مفهوم تصویر مکمل، برایتان یک مثال می زنم. فرض کنید که پیکسل های یک تصویر، با دو عدد 0 و 1 تعریف شده باشند، مثلا عدد 1 ، برای رنگ سفید و عدد 0 ، برای رنگ سیاه. برای به دست آوردن مکمل این تصویر، هر عدد 1 ، به عدد 0 و هر عدد 0 ، به عدد 1 ، تبدیل می شود و در واقع جای دو رنگ سیاه و سفید با هم عوض می شود. در این مثال، تنها دو رنگ سیاه و سفید را داشتیم و بنابراین در تعریف ماتریس مربوط به تصویر، تنها از دو عدد 0 و 1 استفاده می شود.برای تصاویر با تعداد رنگ بیشتر، تعداد N رنگ خواهیم داشت که باعث می شود در ماتریس مربوط به تصویر، از تعداد N عدد برای تعریف رنگ ها استفاده کنیم. در این حالت، برای محاسبه عدد مربوط به هر پیکسل تصویر مکمل، از فرمول زیر استفاده می کنیم (مقدار عدد مربوط به آن پیکسل را با pixel_number نمایش داده ایم) :

pixel_number= N-pixel_number

به مثال زیر توجه کنید :

مثال :


کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
img_1=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image.jpg'[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]img_1[COLOR=#008800])[/COLOR];
 
img_2=imcomplement[COLOR=#008800]([/COLOR]img_1[COLOR=#008800])[/COLOR];
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]img_2[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
نتیجه :

تصویر اصلی :matlab-204.jpg
تصویر مکمل :
matlab-205.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده میزان به کار رفته از هر رنگ در یک تصویر با دستور imhist در متلب

مشاهده میزان به کار رفته از هر رنگ در یک تصویر با دستور imhist در متلب

با استفاده از دستور imhist در متلب، می توانیم برای هر تصویر دلخواه، یک هیستوگرام رسم کنیم که در این هیستوگرام، میزان به کار رفتن رنگ های مختلف در تصویر، نمایش داده می شود. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
img=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image.jpg'[/COLOR][COLOR=#008800])[/COLOR];
img=rgb2gray[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];
 
[COLOR=#0000FF]figure[/COLOR]
imhist[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]تصویر :matlab-206.jpg
هیستوگرام میزان رنگ های به کار رفته در تصویر :
matlab-207.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
افزایش کنتراست یک تصویر با دستور histeq در متلب

افزایش کنتراست یک تصویر با دستور histeq در متلب

دستور histeq در متلب، برای افزایش کنتراست یک تصویر به کار می رود. چنانچه مقادیر مربوط به رنگ های به کار رفته در یک تصویر را مشاهده کنیم (این کار با دستور imhist در متلب، امکان پذیر می باشد)، آنگاه ممکن است که بخشی از رنگ ها، به مقدار زیاد، در تصویر به کار رفته باشند و بخشی دیگر، کمتر در تصویر باشند. افزایش کنتراست، باعث می شود که میزان به کار رفتن رنگ های مختلف، به هم نزدیکتر شود و دیگر تفاوت زیادی که ذکر شد، وجود نداشته باشد. به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
img=[COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image.jpg'[/COLOR][COLOR=#008800])[/COLOR];
img=rgb2gray[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];
 
[COLOR=#0000FF]figure[/COLOR]
histeq[COLOR=#008800]([/COLOR]img[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]تصویر اصلی :matlab-208.jpg
تصویر پس از افزایش کنتراست :
matlab-209.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
مشاهده اطلاعات مربوط به یک تصویر با دستور imfinfo در متلب

مشاهده اطلاعات مربوط به یک تصویر با دستور imfinfo در متلب

با استفاده از دستور imfinfo در متلب، می توانیم اطلاعات و مشخصات مربوط به یک تصویر را مشاهده کنیم. این اطلاعات عبارتند از : نام فایل تصویر، زمان ساخت فایل تصویر، نوع فایل تصویر، عرض تصویر، طول تصویر و ... . به مثال زیر توجه کنید :

[h=4]مثال :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]
 
[COLOR=#0000FF]imfinfo[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'image.jpg'[/COLOR][COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
[h=4]نتیجه :[/h]
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]ans[/COLOR] = 
 
           Filename: [COLOR=#A020F0]'C:\Users\ali\Desktop\image.jpg'[/COLOR]
        FileModDate: [COLOR=#A020F0]'05-Apr-2013 22:49:51'[/COLOR]
           FileSize: [COLOR=#3333FF]62837[/COLOR]
             [COLOR=#0000FF]Format[/COLOR]: [COLOR=#A020F0]'jpg'[/COLOR]
      FormatVersion: [COLOR=#A020F0]''[/COLOR]
              Width: [COLOR=#3333FF]482[/COLOR]
             Height: [COLOR=#3333FF]599[/COLOR]
           BitDepth: [COLOR=#3333FF]24[/COLOR]
          ColorType: [COLOR=#A020F0]'truecolor'[/COLOR]
    FormatSignature: [COLOR=#A020F0]''[/COLOR]
    NumberOfSamples: [COLOR=#3333FF]3[/COLOR]
       CodingMethod: [COLOR=#A020F0]'Huffman'[/COLOR]
      CodingProcess: [COLOR=#A020F0]'Sequential'[/COLOR]
            Comment: [COLOR=#008800]{[/COLOR][COLOR=#008800]}[/COLOR][/FONT]
[COLOR=#008800]
[/COLOR]
[/FONT][/COLOR]
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
پردازش عکس های با پسوند bmp در متلب

پردازش عکس های با پسوند bmp در متلب

فرض کنید که یک عکس با نام myImage.bmp (با پسوند bmp) داریم. ابتدا بد نیست اندازه عکس مورد نظرمان را بررسی کنیم، بنابراین در محیط ویندوز، بر روی عکس، با موس، کلیک سمت راست نموده و گزینه Properties را انتخاب می کنیم. سپس در بخش Details ، می توانیم اندازه عکس را مشاهده کنیم :123.jpg
همان طور که می دانیم، کوچکترین بخش سازنده عکس را پیکسل می نامیم (که در آن، رنگ، ثابت می باشد)،. عکس فوق دارای اندازه 213 در 161 پیکسل می باشد (یعنی 213 پیکس در جهت افقی داریم و تعداد 161 پیکسل هم در جهت عمودی داریم و بنابراین تعداد کل پیکسل ها برابر 213 ضرب در 161 می باشد). خوب حالا به سراغ نرم افزار متلب می رویم.برای وارد کردن اطلاعات عکس مورد نظر به درون نرم افزار متلب، دستورات زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

A = [COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'myImage.bmp'[/COLOR][COLOR=#008800])[/COLOR];
A_size = [COLOR=#0000FF]size[/COLOR][COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
با دستورات فوق، اطلاعات مربوط به عکس را در ماتریسی با نام A ذخیره می کنیم. همچنین با دستور size ، اندازه ماتریس A را به دست می آوریم. نتیجه اجرای کد متلب بالا، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]A_size =

   [COLOR=#3333FF]161[/COLOR]   [COLOR=#3333FF]213[/COLOR]     [COLOR=#3333FF]3[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین ماتریس A ، یک ماتریس سه بعدی است که در بعد اول، دارای اندازه 161، در بعد دوم، دارای اندازه 213 و در بعد سوم، دارای اندازه 3 می باشد. عدد 161 برابر همان تعداد پیکسل در جهت عمودی است و عدد 213 برابر تعداد پیکسل در جهت افقی می باشد، بنابراین دو بعد اول ماتریس A ، برای ارجاع به پیکسل های عکس به کار می روند. اما یک بعد سوم هم داریم که دارای اندازه 3 می باشد، بنابراین ما در ماتریس A ، برای هر پیکسل، 3 مقدار داریم. در واقع، این سه مقدار هستند که رنگ آن پیکسل را مشخص می کنند، پس با تغییر دادن آنها، می توانیم رنگ آن پیکسل را تغییر بدهیم.چنانچه بخواهیم عکس ذخیره شده در ماتریس A را با نرم افزار متلب نمایش بدهیم، از دستور ؟ استفاده می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

A = [COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'myImage.bmp'[/COLOR][COLOR=#008800])[/COLOR];
A_size = [COLOR=#0000FF]size[/COLOR][COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR]

imshow[COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
نتیجه :

124.jpg
اکنون کدها را به گونه ای می نویسیم که در ماتریسی با نام B ، بخشی از عکس را داشته باشیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

A = [COLOR=#0000FF]imread[/COLOR][COLOR=#008800]([/COLOR][COLOR=#A020F0]'myImage.bmp'[/COLOR][COLOR=#008800])[/COLOR];
A_size = [COLOR=#0000FF]size[/COLOR][COLOR=#008800]([/COLOR]A[COLOR=#008800])[/COLOR]

horizontal_start_pixel = [COLOR=#3333FF]50[/COLOR];
horizontal_end_pixel = [COLOR=#3333FF]160[/COLOR];
vertical_start_pixel = [COLOR=#3333FF]10[/COLOR];
vertical_end_pixel = [COLOR=#3333FF]100[/COLOR];

B = [COLOR=#0000FF]zeros[/COLOR][COLOR=#008800]([/COLOR]vertical_end_pixel-vertical_start_pixel+[COLOR=#3333FF]1[/COLOR], horizontal_end_pixel-horizontal_start_pixel+[COLOR=#3333FF]1[/COLOR], [COLOR=#3333FF]3[/COLOR][COLOR=#008800])[/COLOR];

[COLOR=#0000FF]for[/COLOR] ii = vertical_start_pixel:vertical_end_pixel
    [COLOR=#0000FF]for[/COLOR] jj = horizontal_start_pixel:horizontal_end_pixel
        B[COLOR=#008800]([/COLOR]ii-vertical_start_pixel+[COLOR=#3333FF]1[/COLOR],jj-horizontal_start_pixel+[COLOR=#3333FF]1[/COLOR],:[COLOR=#008800])[/COLOR] = A[COLOR=#008800]([/COLOR]ii,jj,:[COLOR=#008800])[/COLOR];
    [COLOR=#0000FF]end[/COLOR]
[COLOR=#0000FF]end[/COLOR]

B=mat2gray[COLOR=#008800]([/COLOR]B[COLOR=#008800])[/COLOR]; [COLOR=#228B22]% important[/COLOR]
imshow[COLOR=#008800]([/COLOR]B[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
استفاده از دستور mat2gray بسیار مهم است و چنانچه آن را به کار نبرید، عکس با رنگ های متفاوتی نمایش داده می شود که مطلوب نیست.نتیجه :



125.png
مشاهده می کنید که تنها اطلاعات مربوط به بخشی از عکس اصلی در ماتریس B ذخیره شده است.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
تبدیل یک عکس به عکس باینری (binary) (پیکسل ها تنها دارای مقادیر 0 و 1)، با دستور im2bw در متلب

تبدیل یک عکس به عکس باینری (binary) (پیکسل ها تنها دارای مقادیر 0 و 1)، با دستور im2bw در متلب

با استفاده از دستور im2bw در متلب، می توانیم یک عکس که هر پیکسل آن می تواند دارای مقادیر دلخواهی باشد را به یک عکس باینری (binary) که پیکس های آن، تنها دارای مقدار 0 یا 1 هستند، تبدیل کنیم.به مثال زیر توجه کنید :

[h=4]مثال :[/h]مثال خود نرم افزار متلب :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]load[/COLOR] trees
BW = im2bw[COLOR=#008800]([/COLOR]X,map,[COLOR=#3333FF]0.4[/COLOR][COLOR=#008800])[/COLOR];
imshow[COLOR=#008800]([/COLOR]X,map[COLOR=#008800])[/COLOR]
[COLOR=#0000FF]figure[/COLOR]
imshow[COLOR=#008800]([/COLOR]BW[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
با دستور load ، اطلاعات مربوط به یک عکس که در نرم افزار متلب ذخیره شده است (جزء اطلاعات داخلی خود متلب) را به درون workspace آورده ایم تا پردازش های بعدی را بر روی آن انجام بدهیم. دستور imshow برای نمایش یک عکس به کار می رود. دستور figure باعث می شود که عکس دوم، در یک پنجره جدید نمایش داده شود.در دستور im2bw ، باید یک حد آستانه (threshold) تعیین شود تا بداند که مقادیر عکس اولیه را چگونه در دو گروه قرار دهد (تبدیل به 0 یا 1). ما مقدار 0.4 را برای آن انتخاب کرده ایم.

[h=4]نتیجه :[/h]عکس اولیه :1244.jpg
عکس باینری (پیکسل ها تنها دارای مقادیر 0 و 1) :
1245.jpg

اگر مقادیر عناصر موجود در ماتریس BW را بررسی کنید، مشاهده می کنید که تنها برابر 0 یا 1 می باشند.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نمایش عکس در یک پنجره با گزینه های کاربردی بیشتر با دستور imtool در متلب

نمایش عکس در یک پنجره با گزینه های کاربردی بیشتر با دستور imtool در متلب

نمایش عکس در یک پنجره با گزینه های کاربردی بیشتر
(مثل تعیین کد معادل رنگ نقطه ها، تعیین فاصله بین دو نقطه، ابزار crop و ...)،
با دستور imtool در متلب

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

مثال :

برای مقایسه دستورهای imshow و imtool ، هر دو را به کار می بریم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]load[/COLOR] trees
imshow[COLOR=#008800]([/COLOR]X,map[COLOR=#008800])[/COLOR]
imtool[COLOR=#008800]([/COLOR]X,map[COLOR=#008800])[/COLOR][/FONT]
[/FONT][/COLOR]
با دستور load ، اطلاعات مربوط به یک عکس که در نرم افزار متلب ذخیره شده است (جزء اطلاعات داخلی خود متلب) را به درون workspace آورده ایم.

نتیجه :

پنجره زیر توسط دستور imshow نمایش داده می شود1246.jpg
پنجره زیر توسط دستور imtool نمایش داده می شود
1247.jpg

مشاهده می نید که یک سری ابزار در آن در نظر گرفته شده است. در ادامه، دو ابزار از میان آنها را شرح می دهیم.با ابزار Inspect pixel values می توانیم مقادیر متناظر با هر پیکسل از عکس را ببینیم :1248.jpg
یک پنجره جدید باز می شود و مقادیر مربوط به چند پیکسل را نمایش می دهد :
1249.jpg


با ابزار Measure distance می توانیم فاصله بین دو پیکسل (دو نقطه) از عکس را به دست آوریم :
1250.jpg

1251.jpg
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
استفاده از عکس های داخلی نرم افزار متلب برای آزمایش کدهای پردازش تصویر

استفاده از عکس های داخلی نرم افزار متلب برای آزمایش کدهای پردازش تصویر

استفاده از عکس های داخلی نرم افزار متلب (همراه خود نرم افزار متلب)
برای آزمایش کدهای پردازش تصویر (عدم نیاز به فراهم کردن عکس های جدید)


یکی از مواردی که هنگام کار با کدهای پردازش تصویر (کار با عکس ها) با آن مواجه می شویم، تهیه یک عکس برای آزمایش کردن کدهای برنامه می باشد. اما همیشه نیاز نیست که حتما عکسی را آماده کنیم، بلکه می توانیم از خود عکس های داخلی نرم افزار متلب (عکس های همراه نرم افزار متلب) استفاده کنیم. برای اینکه تعدادی از عکس های همراه نرم افزار متلب را بیابید، کافی است که به مسیر مشابه مسیر زیر در محل نصب نرم افزار متلب بروید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]MATLAB\R2014a\toolbox\images\imdata[/FONT]
[/FONT][/COLOR]
در مسیر بالا، می توانید تعدادی عکس را بیابید :1252.jpg
مثلا یک عکس با نام onion.png در مسیر بالا وجود دارد، برای استفاده از آن، نیازی نیست که کل مسیر (path) بالا را در کدها بنویسیم، بلکه تنها کد زیر را می نویسیم (زیرا مسیر فوق، جزء مسیرهای نرم افزار متلب می باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

imshow[COLOR=#008800]([/COLOR][COLOR=#A020F0]'onion.png'[/COLOR][COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
بنابراین عکس مورد نظر نمایش داده می شود :
1253.jpg


برای بعضی از این عکس ها، فایل mat نیز وجود دارد که در آن، متغیرهایی حاوی اطلاعات متناظر با عکس، موجود می باشد. به عنوان مثال برای فایل trees.tif ، یک فایل mat با نام trees.mat وجود دارد :1254.jpg
بنابراین می توانیم اطلاعات عکس را مستقیما از فایل trees.mat بخوانیم. برای این منظور، کدهای زیر را می نویسیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#0000FF]clear[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]close[/COLOR] [COLOR=#0000FF]all[/COLOR]
[COLOR=#0000FF]clc[/COLOR]

[COLOR=#0000FF]load[/COLOR] trees
imshow[COLOR=#008800]([/COLOR]X,map[COLOR=#008800])[/COLOR];[/FONT]
[/FONT][/COLOR]
بنابراین عکس مورد نظر نمایش داده می شود :
1255.jpg
 
بالا