پردازش عکس های با پسوند bmp در متلب
فرض کنید که یک عکس با نام myImage.bmp (با پسوند bmp) داریم. ابتدا بد نیست اندازه عکس مورد نظرمان را بررسی کنیم، بنابراین در محیط ویندوز، بر روی عکس، با موس، کلیک سمت راست نموده و گزینه Properties را انتخاب می کنیم. سپس در بخش Details ، می توانیم اندازه عکس را مشاهده کنیم :
همان طور که می دانیم، کوچکترین بخش سازنده عکس را پیکسل می نامیم (که در آن، رنگ، ثابت می باشد)،. عکس فوق دارای اندازه 213 در 161 پیکسل می باشد (یعنی 213 پیکس در جهت افقی داریم و تعداد 161 پیکسل هم در جهت عمودی داریم و بنابراین تعداد کل پیکسل ها برابر 213 ضرب در 161 می باشد). خوب حالا به سراغ نرم افزار متلب می رویم.
برای وارد کردن اطلاعات عکس مورد نظر به درون نرم افزار متلب، دستورات زیر را می نویسیم :
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
با دستورات فوق، اطلاعات مربوط به عکس را در ماتریسی با نام A ذخیره می کنیم. همچنین با دستور size ، اندازه ماتریس A را به دست می آوریم. نتیجه اجرای کد متلب بالا، به صورت زیر می باشد :
161 213 3
بنابراین ماتریس A ، یک ماتریس سه بعدی است که در بعد اول، دارای اندازه 161، در بعد دوم، دارای اندازه 213 و در بعد سوم، دارای اندازه 3 می باشد. عدد 161 برابر همان تعداد پیکسل در جهت عمودی است و عدد 213 برابر تعداد پیکسل در جهت افقی می باشد، بنابراین دو بعد اول ماتریس A ، برای ارجاع به پیکسل های عکس به کار می روند. اما یک بعد سوم هم داریم که دارای اندازه 3 می باشد، بنابراین ما در ماتریس A ، برای هر پیکسل، 3 مقدار داریم. در واقع، این سه مقدار هستند که رنگ آن پیکسل را مشخص می کنند، پس با تغییر دادن آنها، می توانیم رنگ آن پیکسل را تغییر بدهیم.
چنانچه بخواهیم عکس ذخیره شده در ماتریس A را با نرم افزار متلب نمایش بدهیم، از دستور ؟ استفاده می کنیم :
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
imshow(A)
نتیجه :
اکنون کدها را به گونه ای می نویسیم که در ماتریسی با نام B ، بخشی از عکس را داشته باشیم :
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
horizontal_start_pixel = 50;
horizontal_end_pixel = 160;
vertical_start_pixel = 10;
vertical_end_pixel = 100;
B = zeros(vertical_end_pixel-vertical_start_pixel+1, horizontal_end_pixel-horizontal_start_pixel+1, 3);
for ii = vertical_start_pixel:vertical_end_pixel
for jj = horizontal_start_pixel:horizontal_end_pixel
B(ii-vertical_start_pixel+1,jj-horizontal_start_pixel+1,:) = A(ii,jj,:);
end
end
B=mat2gray(B); % important
imshow(B)
استفاده از دستور mat2gray بسیار مهم است و چنانچه آن را به کار نبرید، عکس با رنگ های متفاوتی نمایش داده می شود که مطلوب نیست.
نتیجه :
مشاهده می کنید که تنها اطلاعات مربوط به بخشی از عکس اصلی در ماتریس B ذخیره شده است.
باعرض سلام و خسته نباشید خدمت عزیزان
من کد متلب قسمتی از عکس را که بخواهیم نشان دهیم بازنویسی کردم ولی هنگام اجرا اون قسمت یک صفحه مشکی رو نمایش میده لطفا راهنمایی فرمایید چرا مشکی نمایش میده