>>imshow(img) >>size(img) ans= 384 512 3
(کار با تابع imshow در متلب)
>>size(img( : , : , 1 ))
>>imshow(img ( : , : , 1 )) >>figure ; imshow (img)
>>figure; imshow (img ( : , : , 2))
حالا برعکس شد جاهایی که سبز نیستن تیره ترن
کانال های مختلف رنگی هستندکه این سه تا روی هم ترکیبشان باعث میشود که شما تصویر را رنگی ببینید
حالا در ادامه آموزش پردازش تصویر تابع imread در متلب یک تصویری که ذاتا سیاه و سفید هست را بررسی کنیم
>>img = imread(‘ rice . png ‘); >>imshow (img)
تاحالا دو جور تصویر را دیدیم حالت رنگی و گری اسکیل (سطح خاکستری )
درتابع imread در متلب پردازش تصویر متلب میتوانیم خودمان دستی تصویر ایجاد کنیم .
>>img=zeros(400,400); >>imshow (img) >>img (100:200 , 100:200)= 1 ;
حالا اگر بخوایم یک دایره بکشیم ( باید همه نقاط را جاروب بکنیم جاهایی که داخل دایره هست یک و انهایی که بیرون دایره هست صفر ) بادو تا حلقه تو در تو میتوانید بنویسید (شرط حضور داخل دایره فاصله از مرکز باید کمتریا مساوی شعاع باشد ) برای هر کسی این شرط برقرار بود ان مختصات را یک میکنید .
چیزی که الان اینجا داریم یک تصویر Black And White ( سیاه و سفید) اصطلاحا به این تصاویر تصاویر Logical (منطقی) هم میگویند.
خیلی وقتها نتیجه یک پراسس تصویر، یک الگوریتمی که به هر حال یک کاری انجام میدهد اجیتکشن میکند ، فستیتکشن میکند یک همچین حالتی این هم نوع سوم از تصاویر از لحاظ رنگی است .
تابع imread در متلب یه نوع دیگه از تصاویر هست که اصطلاحا میگن Index Color نقشه های فرش اونهایی که خیلی از نظر هنری ناب هستن بهترین مصداق برای تصاویرIndex شده و Quantites هستن . تصاویر مختلفی که میان به جای این که همه رنگها را در خودشان داشته باشند یک سری رنگهای شماره گزاری شده در خودشان ایجاد میکنند یا اندیس گزاری شده اینها را اصطلاحا Index Color Imasge که نوع چهارمی از تصاویر دیجیتال هستند که معمولا در محیط وب برای این که پهنای باند را کمتر اشغال بکنند از این نوع تصاویر استفاده میشود
معروف ترین نوع این تصاویر فورمت gif ,png , اینها حالت اندیس گزاری شده را استفاده میکنند ولی هستند توی فرمتهای دیگر که این نوع اندیس گزاری ها استفاده میشود .
اگر تصویر شما اندیس گزاری شده باشد imread را اگر فرا خوانی میکنید با دو تا خروجی اگر استفاده بکنید تصویر اول میگوید که نقشه چی هست map نقشه رنگ هست . تنها انگیزه این است که حجم داده را پایین تر بیاورند به جای این که با یک ماتریس سه طبقه کاربکنید با یک ماتریس یک طبقه کار میکنید (داده سه برابر کاهش پیدا میکند ) فقط در کنار اینها باید بگوییم که رنگها محدودند و هر رنگی امکان حضور در تصویر را ندارد به جای این که تصویر را وقتی نمایش میدهیم . (استفاده از تابع imshow و imread در متلب)
>>img=imread(‘ rice . png ‘) ; >>imshow (img )
>>imshow( ‘coins .png ‘)
تابع دیگه ای که داریم تابع imwrite هست اگر که شما یک تصویری را بخواهید ذخیره کنید این به شما کمک خواهد کرد .
ما امدیم یک فایل 400 در 400 ایجاد کردیم ، بخش 100 تا 200 این را یک کردیم (این یک تصویر دیگه) (استفاده و کار با تابع imwrite در متلب)
>>img=zeros(400 , 400 ); >>img (100 : 200 , 100 :200 )=1; >>imwrite (img , ‘mypic .gpg ‘ );
رایت بکن همین img را تو MyPic.jpg
اگر Explore بخواهیم ببینیم یک فایل تصویری ایجاد شده
لذا یک دیتا یی را حتی اگر تصویر هم نباشد میشود به شکل یک تصویر ذخیره سازی کرد . البته سعی باید بکنید از فرمت Last Less استفاده بکنید الان jpg فرمت Last Less نیست چیزی که ذخیره میکند واقعا ان تصویری نیست که ما به ان دادیم چون از تکنیک های فشرده سازی استفاده میکند ودقیقا اطلاعاتی را که ذخیره میکنید به شما نمیدهد چیزی مثل png یا bit map ذخیره کنید لاستلس منتها حجم دلتا ها شاید کمی بالاتر برود . الزاما تو کار پردازش تصویر imwrite کاربرد ندارد .یک وقت هست یک ماتریس بزرگی دارید دوست دارید که این راVisualise ش کنیند به شکل یک ماتریس Visualise کنید وذخیره کنید ( یکی از روش های اتصال اطلاعات بین نرم افزارها همین فایل های تصویری است )
یکی از ابزا رهای دیگرپردازش تصویر ابزار imtool هستند.
>>img=imread(‘rice . png ‘); >>imtool(img)
اینجا جزئیات وعناصر ریز سازنده که با تغییر شدت نورو اینها ایجاد شده وجود دارد حتی فاصله بین چند نقطه را هم حساب میکند میتوانید تصاویر را کراپ بکنید یک ناحیه مشخص را میتوانید از نظر عددی رو شنایی اش رابسنجید .
(مثلا برای اندازه گیری شعاع وبر اساس ان یک پارا مترهایی را تو الگوریتم ست بکنید یا level برای این که بسنجید الگوریتم ان کاری را که میخواستید به درستی انجام داده)
یک مواقعی هست میخواید تصویر را از نظر اندازه کوچیک و بزرگ کنیند ، تابعی که برای این کار پیاده سازی شده در محیط متلب imresize هست که تصویر را میگیرد ودر خروجی یک تصویر scale شده را به ما میدهد
Imresize Syntax B = imresize (A , scale)
scale باید درصد بهش بدیم (بین صفر ویک )
B = imresize (A ,[numcows numcols ])
تعداد سطر و ستون رو بهش میدیم
[Y new map ] = imresize ( X , map , scale ) […] = imresize ( …, method )
نحوه متدی که استفاده میشود nearest میگوید برای هر کسی نزدیکترین چیزی که در دور برش هست را در نظر بگیردbilinear حالت فرمول درون یابی دو خطی را در نظر میگیردbicubic یک فرمول درجه سه را در نظر میگیرد برای درون یابی زمان بیشتری را میبرد ولی منجر به ایجاد تصویر های نرم تری میشود.
[… ] = imresize ( …, parameter , Value , … )
کرنل های مختلفی هم برای این درون یابی ها میشود استفاده کرد .
به عنوان مثال (کار تابع imresize در متلب)
>>img half = imresize ( img ,0/5); >> size (img – half ) And= 128 128 >>imshow (img – half );
میشود یک تصویری که اندازه ا ش نصف تصویر قبلِ
>>img half = imresize( img , 0/5 , ‘ nearest ‘) ; >>im show ( imresize ( img , 0/5 , ‘ nearest ‘ );
>>figure ; imshow ( imresize ( img , 0/5 , ‘ blinear ‘))
این نرم تر هست چون اینجا دارد یک درون یابی اتفاق می افتد bicubic یک عملکرد هوشمندانه تری رادارد حالتی که اجزای تصویر بیشتر با هم هماهنگی دارند از نظر پردازشی زمان زیادی را خواهد گرفت ( اگر تصاویر کوچیک هستند همان بایکیوبیک به خاطر دقت بالایی که دارد توصیه میشود )
یک تابع دیگه ای در طول box پردازش تصویر هست مشابه کارکرد explore ویندوز هست .
به عنوان مثال :
میخوایم اطلاعات تصویری mypic.jpg را بخوانیم ،
>>img = imread(‘mypic . gpg ‘) >>imshow (img)
میخوایم قبل از این که این را بخوانیم ببینیم فایل چه اطلاعاتی دارد از تابع imfinfo (کار با تابع imfinfo در متلب) استفاده میکنیم .
نتیجه این چیزی که اینجا میبینیم در غالب متغیرans ذخیره شده است که یه اسکرابچر میتوانیم خودمان هم ذخیره کنیم بگیم
Info = imfinfo ( ‘ pepper4s . png ‘);
اگر بخوایم کپی رایت تصویر رو یه جایی بنویسیم
>>info.Copyright ans = Copyright the mathWorks, Unc.
>> info.width ans = 512
>> info.Height ans = 384
>> c