نوشتن داده های عکس در یک فایل
در این مقاله با موارد زیر آشنا خواهید شد:
- مقدمه
- مشخص کردن پارامترهای خاص
- خواندن و نوشتن عکس های باینری بصورت 1 بیتی
- مشخص کردن کلاس ذخیره سازی برای فایل خروجی
- تبدیل فرمت های گرافیکی به یکدیگر
مقدمه
برای بیرون دادن داده های متلب، به طوری که این داده ها در داخل یک فایل گرافیکی با یک فرمت پشتیبانی شده قرار بگیرند، می توانید از تابع imwrite استفاده نمایید. هنگام استفاده از تابع imwrite، ابتدا باید نام متغیر مورد نظر را در متلب وارد کنید و سپس نامی را برای آن مشخص کنید. اگر که شما یک پسوند را به همراه آن نام وارد کنید، دستور imwrite تلاش می کند تا فرمت مطلوب را از آن درک کند. بعنوان مثال، اگر پسوند jpg. استفاده کنید، دستور imwrite به فرمت JPEG پی خواهد برد. شما همچنین می توانید فرمت مورد نظر را بصورت یک آرگومان، به تابع imwrite بدهید.
این مثال، عکس ایندکس شده ی X را از فایلی به نام clown.mat، همراه با نقشه ی رنگ آن(map) بارگذاری می کند و سپس این عکس را بصورت یک فایل BMP(نقشه بیتی) اکسپورت می کند.
$$imwrite(X,map,'clown.bmp')$$
مشخص کردن پارامترهای خاص
هنگامی که دستور imwrite را به همراه برخی از فرمت های گرافیکی مورد استفاده قرار می دهید، می توانید یک سری پارامترهای خاص را به این دستور اضافه کنید. بعنوان مثال در عکس های PNG می توانید عمق بیت ها را مشخص کنید. مثلا در مثال زیر، عکس سیاه و سفید I را به یک عکس PNG چهار بیتی، تبدیل می کنیم:
$$imwrite(I,'clown.png','BitDepth',4);$$
در مثال زیر، با استفاده از پارامتر کیفیت فشرده سازی، عکس A را به یک عکس با فرمت JPEG تبدیل می کنیم:
$$imwrite(A, 'myfile.jpg', 'Quality', 100);$$
خواندن و نوشتن عکس های باینری بصورت 1 بیتی
در برخی از فرمت های فایل، مثل فرمت TIFF، یک عکس باینری می تواند بصورت 1 بیتی ذخیره شود. هنگامی که شما یک عکس باینری را بصورت 1 بیتی بخوانید، دستور imread داده ها را بصورت یک ماتریس منطقی(logical) ذخیره می کند. در صورتی که فرمت یک فایل، از فرمت 1 بیتی پشتیبانی کند، دستور imwrite به طور پیش فرض عکس های باینری را به صورت یک عکس 1 بیتی تولید می کند(می نویسد). مثال زیر، یک عکس باینری را می خواند و سپس آن را به فرمت TIFF درمی آورد(می نویسد):
$$BW = imread('text.png');$$
$$imwrite(BW,'test.tif');$$
برای اینکه عمق بیت های فایل test.tif را بررسی کنید، می توانید تابع imfinfo را فراخوانی کنید و سپس مقدار BitDepth را بررسی کنید:
نکته: هنگامی که فایل های باینری را تولید می کنید(می نویسید)، متلب فیلد ColorType را برابر با مقدار 'grayscale' قرار می دهد.
مشخص کردن کلاس ذخیره سازی برای فایل خروجی
دستور imwrite، از قواعد زیر برای مشخص کردن کلاس ذخیره سازی بکار رفته در عکس خروجی استفاده می کند:
کلاس ذخیره سازی عکس | کلاس ذخیره سازی برای عکس خروجی |
logical |
در صورتی که فایل عکس خروجی از عکس های 1 بیتی پشتیبانی کند، دستور imwrite یک عکس 1 بیتی را ایجاد می کند. در صورتی که فرمت فایل عکس خروجی، از عکس های 1 بیتی پشتیبانی نکند، دستور imwrite داده های عکس را بصورت یک عکس سیاه و سفید از نوع uint8 ذخیره می کند. |
uint8 |
در صورتی که فرمت فایل عکس خروجی، از عکس های 8 بیتی بدون علامت پشتیبانی کند، دستور imwrite یک عکس 8 بیتی بدون علامت را ایجاد می کند. |
uint16 |
در صورتی که فرمت فایل عکس خروجی، از عکس های 16 بیتی بدون علامت(PNG یا TIFF)پشتیبانی کند، دستور imwrite یک عکس 16 بیتی بودن علامت را ایجاد می کند. در صورتی که فرمت فایل عکس خروجی، از عکس های 16 بیتی بدون علامت پشتیبانی نکند، دستور imwrite داده های عکس را به uint8 مقیاس دهی می کند و یک عکس 8 بیتی را ایجاد می کند. |
int16 |
تا اندازه ای پشتیبانی می شود. به فرمت فایل بستگی دارد.
|
single | تا اندازه ای پشتیبانی می شود. به فرمت فایل بستگی دارد. |
double |
متلب داده های این عکس را به uint8 مقیاس دهی می کند و یک عکس 8 بیتی را ایجاد می کند، زیرا اکثر فرمت های عکس ها از 8 بیت استفاده می کنند. |
تبدیل فرمت های گرافیکی به یکدیگر در پردازش تصویر
برای تغییر دادن فرمت گرافیکی یک عکس، ابتدا از تابع imread استفاده کنید تا عکس مورد نظر را به متلب وارد کنید. سپس با استفاده از تابع imwrite ، فرمت مناسب را انتخاب کنید و عکس را اکسپورت کنید(ذخیره کنید). بعنوان مثال در مثال زیر، با استفاده از تابع imread یک عکس با فرمت TIFF را می خوانیم و سپس آن را با فرمت JPEG با استفاده از دستور imwrite ذخیره می کنیم:
$$moontiff = imread('moon.tif');$$
$$imwrite(moontiff,'moon.jpg');$$
- نوشته شده توسط احسان عباسی
- بازدید: 6073