پردازش تصویر با MATLAB – قسمت اول : دستور های اولیه

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

پردازش تصویر

پردازش تصویر تکنیکی است برای تبدیل تصویر به فرمت دیجیتال و انجام عملیات روی آن برای رسیدن به یک تصویر بهبود یافته یا استخراج برخی اطلاعات مفید از آن. تغییراتی که در تصاویر اتفاق می افتد معمولاً به صورت خودکار انجام می شود و مبتنی بر الگوریتم های دقیق طراحی شده می باشد.

پردازش تصویر ، تخصصی است وابسته به شاخه های مختلف علوم از جمله ریاضیات ، فیزیک ، مهندسی اپتیک و برق. علاوه بر این ، با زمینه های دیگر مانند تشخیص الگو ، یادگیری ماشین ، هوش مصنوعی و تحقیقات بینایی انسان نیز مرتبط دارد. مراحل مختلف در پردازش تصویر شامل وارد کردن تصویر با اسکنر نوری یا از طریق دوربین دیجیتال ، تجزیه و تحلیل و دستکاری تصویر (فشرده سازی داده ها ، بهسازی تصویر و فیلتر کردن) و تولید تصویر خروجی مورد نظر است.

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

در پزشکی ، از پردازش تصویر برای روش های تصویربرداری تشخیصی مانند رادیوگرافی دیجیتال ، برش نگاری با گسیل پوزیترون (PET) ، توموگرافی کامپیوتری محوری (CAT) ، تصویربرداری رزونانس مغناطیسی (MRI) و تصویربرداری رزونانس مغناطیسی کارکردی (fMRI)  استفاده می شود. کاربرد های صنعتی شامل سیستم های تولیدی مانند سیستم های ایمنی ، کنترل کیفیت و کنترل اتوماتیک هدایت خودرو می باشد.

الگوریتم های پیچیده پردازش تصویر در کاربرد های مختلف از تشخیص سربازان یا وسایل نقلیه ، هدایت موشک و تشخیص و شناسایی اشیاء استفاده می شود. تکنیک های بیومتریک شامل انگشت نگاری ، چهره ، عنبیه و تشخیص دست به طور گسترده ای در اجرای قوانین و امنیت استفاده می شود.

دوربین های دیجیتال و دوربین های فیلمبرداری ، تلویزیون های با وضوح بالا ، نمایشگرها ، دستگاه های پخش DVD ، دستگاه های ضبط ویدئو شخصی و تلفن های همراه از اقلام الکترونیکی مصرفی پرطرفدار هستند که از تکنیک های پردازش تصویر بهره می برند.

MATLAB

متلب (MATLAB) ، مخفف ” Matrix Laboratory یا آزمایشگاه ماتریس ” بستری برای حل مسائل ریاضی و علمی است. متلب یک زبان برنامه نویسی اختصاصی است که توسط MathWorks توسعه یافته است و امکان دستکاری ماتریس ، توابع و ترسیم داده ها ، پیاده سازی الگوریتم ها ، ایجاد رابط کاربری و ارتباط با برنامه های نوشته شده به زبان های برنامه نویسی مانند C ، C ++ ، جاوا و غیره را دارد.

درMATLAB  ، جعبه ابزار پردازش تصویر یا IPT مجموعه ای از توابع است که قابلیت محیط محاسبات عددی MATLAB را گسترش می دهد. این مجموعه جامعی از الگوریتم های مرجع استاندارد و کاربرد های پردازش تصویر ، تجزیه و تحلیل ، تجسم و توسعه الگوریتم ها را ارائه می دهد.

می توان از آن برای انجام ناحیه بندی تصویر ، بهسازی تصویر ، کاهش نویز ، تبدیلات هندسی ، ثبت تصویر و عملیات پردازش تصویر سه بعدی استفاده کرد. بسیاری از عملیات IPT از کد های  ++C/C برای نمونه سازی رومیزی و استقرار سیستم بینایی پشتیبانی می کنند.

تصویر دیجیتال چیست؟

یک تصویر دیجیتال را می توان به صورت یک تابع دو بعدی f(x,y) تعریف کرد، که x و y  مختصات فضایی هستند و اندازه یا دامنه f در هر دو مختصات را شدت روشنایی تصویر در آن نقطه می نامیم. هنگامی که x،y  و اندازه f کمیت های گسسته و محدود باشند ، تصویر به عنوان یک تصویر دیجیتالی شناخته می شود.

دیجیتالی کردن مقادیر مختصات، ” نمونه برداری ” نامیده می شود، در حالی که دیجیتالی کردن مقادیر دامنه ” کمی سازی ” نامیده می شود. حاصل نمونه برداری و کمی سازی ، ماتریسی از اعداد واقعی خواهد بود. یعنی می توان یک تصویر دیجیتال را به صورت زیر نشان داد :

ماتریس توابع تصویر
ماتریس توابع تصویر

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

دستورات اولیه پردازش تصویر در MATLAB

در محیط MATLAB یک تصویر دیجیتال به صورت زیر نشان داده شده است :

ماتریس توابع تصویر در متلب
ماتریس توابع تصویر در متلب

در این نمایش ، می توانید متوجه تغییر مبدا شوید.

فراخوانی تصویر

تصاویر در محیط MATLAB با استفاده از تابع imread فراخوانی می شوند. نوشتار این دستور به صورت زیر است :

imread(‘filename’);

که ” filename ” رشته ای است شامل نام کامل تصویر همراه با فرمت آن. به عنوان مثال :

>>F = imread(Penguins_grey.jpg);
>>G = imread(Penguins_RGB.jpg);

لطفاً توجه داشته باشید که وقتی اطلاعات مسیر در ” filename ” وجود ندشته باشد،” imread ”  فایل های موجود در مسیر فعلی را فراخوانی می کند. برای فراخوانی تصویر از مسیری دیگر، باید آن مسیر آن تصویر را مشخص کنید.

نقطه ویرگول (؛) در انتهای دستور برای نمایش ندادن خروجی استفاده می شود و اگر آن را در انتهای دستور قرار ندهید، MATLAB نتیجه عملیات مشخص شده در آن خط را روی صفحه نمایش می دهد.

“>>” شروع خط فرمانی که در پنجره فرمان یا command window نوشته شده را نمایش می دهد.

تصویر سیاه و سفید در متلب
شکل ۱: تصویر مقیاس خاکستری ( Grayscale ) از پنگوئن ها
تصویر RGB در متلب
شکل ۲: تصویر رنگی RGB از پنگوئن ها

شکل ۱ و ۲ به ترتیب تصاویر مقیاس خاکستری و رنگی RGB پنگوئن ها را نشان می دهد. این تصاویر را می توان از وب سایت EFY دانلود و ذخیره کرد.

توابع imread ، imshow و imwrite در متلب به ترتیب برای فراخوانی تصاویر، نمایش و ذخیره سازی آن ها استفاده می شوند.

در مورد تصاویر در مقیاس خاکستری ، ماتریسی که توسط دستور imread حاصل می شود شامل ۲۵۶ × ۲۵۶ یا ۶۵،۵۳۶ عنصر است. هر یک از این المان ها یا پیکسل های موجود در تصویر مقیاس خاکستری مقداری دارند که در ماتریس F(256×۲۵۶ elements) قرار می گیرد و می توان به عنوان یک متغیر متلب ، عملیات ماتریسی مختلف را بر روی آن انجام داد.

در مورد تصاویر رنگی RGB ، هر پیکسل شامل لیستی از سه مقدار است که اجزای رنگ قرمز ، سبز و آبی آن پیکسل مشخص را نشان می دهد. پس ماتریس “G” یک ماتریس سه بعدی ۳x256x256 است. اگر نقطه ویرگول را در انتهای دستور نگذاریم، نتیجه روی صفحه نمایش داده می شود.

به طور خلاصه ، تابع imread مقادیر پیکسل را از یک فایل تصویری می خواند و ماتریسی از تمام این مقادیر پیکسل را برمی گرداند.

برای به دست آوردن اندازه یک تصویر دو بعدی ، می توانید از دستور size استفاده کنید :

[M,N] = size(f)

که تعداد سطرها (M) و ستون ها (N) را در تصویر برمی گرداند.

با استفاده از دستور whos می توانید اطلاعات بیشتری در مورد آرایه ها پیدا کنید. برای مثال “whos f” نام ، اندازه ، تعداد بایت ، کلاس و ویژگی های آرایه “f” را نشان می دهد.

نام

اندازه

تعداد بایت

کلاس ویژگی ها

F

۷۶۸×۱۰۲۴×۳

۲۳۵۹۲۹۶

uint8

و همچنین نتیجه “whos G” به صورت زیر است :

نام

اندازه

تعداد بایت

کلاس ویژگی ها

G

۷۶۸×۱۰۲۴

۷۸۶۴۳۲

uint8

نمایش تصاویر

تصاویر بر روی محیط MATLAB با استفاده از تابع imshow ، به صورت زیر نوشته و نمایش داده می شوند:

imshow(f)

که’f’  یک آرایه تصویری از نوع داده uint8 یا double است. نوع داده ‘uint8’ مقادیر اعداد صحیح را بین ۰ تا ۲۵۵ محدود می کند.

لازم به یادآوری است که برای ماتریس های از نوع “double” ، تابع imshow انتظار دارد که مقادیر بین ۰ تا ۱ باشد، که در آن مقدار ۰ به عنوان رنگ سیاه و مقدار ۱ به عنوان سفید نمایش داده می شوند. مقادیر بین ۰ تا ۱ به صورت مقیاس خاکستری نمایش داده می شود. به همین ترتیب مقادیر بیشتر از ۱ سفید و مقدار کمتر از صفر سیاه نمایش داده می شود. برای رسیدن به مقادیر در این محدوده ، می توان از ضریب تقسیم استفاده کرد. هرچه ضریب تقسیم بزرگتر باشد ، تصویر تیره تر خواهد بود.

به عنوان مثال ، اگر دستور imshow(G) را وارد کنید ، تصویری که روی دسکتاپ نمایش داده می شود تصویر نشان داده شده در شکل ۳ خواهد بود. imshow(F) تصویر نشان داده شده در شکل ۴ را نشان می دهد. ‘imshow(f, [low high])’ پیکسل های کمتر یا مساوی low را سیاه نمایش می دهد و همه مقادیر بیشتر یا مساوی با high را سفید نمایش می دهد. مقادیر بین آن ها به عنوان مقادیر شدت روشنایی متوسط نمایش داده می شوند.

تصویر رنگی مثال دستور imshow متلب
شکل ۳: تصویر بدست آمده با دستور imshow(G)
تصویر خاکستزی مثال دستور imshow متلب
شکل ۴: تصویر بدست آمده با دستور imshow(F)

‘imshow (f,[])’ تصویر f را در بازه ی حداقل مقدار و حداکثر مقدار آن نمایش می دهد، که این به بهبود کنتراست تصاویر با دامنه کم کمک می کند.

ابزار های مختلف بخش Image Tools و کاربرد آن ها

Image tool در جعبه ابزار پردازش تصویر ، محیط تعاملی تری برای مشاهده و ویرایش تصاویر ، نمایش اطلاعات دقیق در مورد مقادیر پیکسل ها ، اندازه گیری فاصله ها و سایر عملیات کاربردی ارائه می دهد. برای کار با ابزار تصویر ، از تابع imtool استفاده می کنیم. دستورات زیر، تصویر Penguins_grey.jpg را که در دسکتاپ ذخیره شده است فراخوانی می کند و سپس با استفاده از ‘imtool’ نمایش می دهد:

>>B = imread(Penguins_grey.jpg);
>>imtool(B)

شکل ۵ پنجره ای را نشان می دهد که هنگام استفاده از image tool ظاهر می شود. با قرار دادن مکان نمای ماوس در محل پیکسل مورد نظر (سطر یا ستون مورد نظر) می توان وضعیت و اطلاعات پیکسل مربوطه را مشاهده کرد.

نمایش پنجره Image tools در متلب
شکل ۵: پنجره ای که هنگام استفاده از ابزار تصویر ظاهر می شود

ابزار Measure Distance در زبانه Tools برای نشان دادن فاصله بین دو نقطه انتخاب شده استفاده می شود. شکل ۶ استفاده از این ابزار را برای اندازه گیری فاصله بین منقار پنگوئن های مختلف نشان می دهد.

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

شکل ۶: ابزار اندازه گیری فاصله در زبانه Tools برای اندازه گیری فاصله بین منقار پنگوئن های مختلف استفاده شده است

ابزار Overview در زبانه Tools کل تصویر را در یک نمای کوچک نمایش می دهد. ابزار Pixel Region پیکسل های جداگانه ای را از ناحیه مربعی کوچک در قسمت بالا سمت راست نشان می دهد که به اندازه کافی بزرگنمایی شده اند تا مقادیر واقعی پیکسل ها را مشاهده کنید. شکل ۷ تصویر snapshot را نشان می دهد.

ابزار Overview در image tools متلب
شکل ۷: ابزار Overview کل تصویر را در یک نمای کوچک نمایش می دهد. ابزار Pixel Region پیکسل های جداگانه ای را در ناحیه مربعی کوچک در گوشه بالا سمت راست نشان می دهد که به اندازه کافی بزرگنمایی شده اند تا مقادیر واقعی پیکسل ها را مشاهده کنید

با استفاده از تابع subplot می توان چندین تصویر را در یک شکل نمایش داد. این تابع دارای سه پارامتر در داخل براکت است که دو پارامتر اول تعداد سطر ها و ستون ها را برای تقسیم شکل مشخص می کند و پارامتر سوم مشخص می کند که از کدام زیرمجموعه برای نمایش تصویر استفاده کنید. به عنوان مثال subplot(3,2,3) به MATLAB می گوید که شکل را در سه سطر و دو ستون تقسیم کرده و بخش سوم را فعال کن. برای نمایش تصاویر Penguins_RGB.jpg و Penguins_grey.jpg در یک شکل واحد ، باید دستورات زیر را بنویسید :

>> A=imread(‘Penguins_grey.jpg’);
>> B=imread(‘Penguins_RGB.jpg’);
>>figure
>>subplot(1,2,1),imshow(A)
>>subplot(1,2,2),imshow(B)

تصویری که پس از دستور سوم روی صفحه نمایش داده می شود در شکل ۸ نشان داده شده است.

نمایش تصویر مقیاس خاکستری و رنگ در کنار یک دیگر
شکل ۸: تصاویر مقیاس خاکستری و تصویر رنگی RGB با هم نشان داده شده است

ذخیره تصاویر

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

imwrite(f, ‘filename’);

این دستور داده های تصویر ‘f’ را با نام مشخص شده با ‘filename’ در پوشه فعلی شما ذخیره می کند. تابع imwrite از اکثر فرمت های پرکاربرد فایل های گرافیکی از جمله GIF ، HDF ، JPEG یا JPG ، PBM ، BMP ، PGM ، PNG ، PNM ، PPM و TIFF و غیره پشتیبانی می کند.

مثال زیر یک آرایه ۱۰۰ × ۱۰۰ از مقادیر خاکستری را در یک فایل PNG به نام random.png در پوشه جاری ذخیره می کند :

>> F = rand(100);
>>imwrite(F, ‘random.png’)

وقتی پوشه ی فعلی را که در آن کار می کنید باز کنید ، یک فایل تصویری به نام “random.png” مشاهده می کنید.

برای تصاویر JPEG ، نحو نوشتار imwrite به صورت زیر قابل استفاده است:

imwrite(f, ‘filename.jpg’, ‘quality’, q)

که’q’  یک عدد صحیح بین ۰ و ۱۰۰ است.

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

اکنون می توانید تصویر Penguins_grey.jpg که در پوشه فعلی ذخیره شده را فراخوانی کنید و آن را در قالب JPG با سه پارامتر کیفیت مختلف ذخیره کنید: ۷۵ (پیش فرض) ، ۱۰ (کیفیت پایین با اندازه کوچک) و ۹۰ (کیفیت بالا با اندازه بزرگ) :

F = imread(‘Penguins_grey.jpg’);
imwrite(F,’Penguins_grey_75.
jpg’,’quality’,۷۵);
imwrite(F,’Penguins_grey_10.
jpg’,’quality’,۱۰);
imwrite(F,’Penguins_grey_90.
jpg’,’quality’,۹۰);

در شکل های ۹ تا ۱۱ تصاویری برای ضریب کیفیت های متفاوت به ترتیب ۷۵ ، ۱۰ و ۹۰ نشان داده شده است. توجه داشته باشید که یک تصویر با کیفیت پایین دارای اندازه کوچکتری نسبت به یک تصویر با کیفیت بالاتر است.

تصویر با مقدار کیفیت 75
شکل ۹: تصویر با ضریب کیفیت ۷۵

دستور imwrite برای تصاویر با فرمت TIFF به صورت زیر قابل استفاده است:

imwrite (g, ‘filename.tif’, ‘compression’,
‘parameter’, ……’resolution’,
[colresrowres])

اطلاعات تصاویر

جزئیات فایل شامل نام فایل ، داده ها ، اندازه ، فرمت ، طول و عرض را می توان با استفاده از دستور زیر به دست آورد :

imfinfo’filename’

به عنوان مثال ، دستور imfinfo (‘Penguins_grey.jpg’) اطلاعات زیر را می دهد :

ans=
Filename: [1×۵۰ char]
FileModDate: ’۰۲-Aug-2016 09:24:12′
FileSize: 100978
Format: ‘jpg’
FormatVersion: ”
Width: 1024
Height: 768
BitDepth: 8
ColorType: ‘grayscale’
FormatSignature: ”
NumberOfSamples: 1
CodingMethod: ‘Huffman’
CodingProcess: ‘Sequential’
Comment: {}

موارد اطلاعاتی نمایش داده شده توسط ‘imfinfo’ را می توان در یک متغیر ساختاری ذخیره کرد تا برای محاسبات بعدی مورد استفاده قرار گیرد.

تصویر با مقدار کیفیت 10
شکل ۱۰: تصویر با ضریب کیفیت ۱۰
تصویر با مقدار کیفیت 90
شکل ۱۱: تصویر با ضریب کیفیت ۹۰

مثال زیر تمام اطلاعات را در متغیر K ذخیره می کند :

K = imfinfo(‘Penguins_grey.jpg’)

اطلاعات ایجاد شده توسط ‘imfinfo’ به وسیله فیلدهایی به متغیر ساختار اضافه می شود که با یک نقطه پس از ‘K’  قابل دسترسی است. به عنوان مثال ، طول و عرض تصویر در فیلدهای ساختار K.height و K.weight ذخیره می شود.

بیشتر بخوانید :

منبع Electronics Foru

درباره‌ی امیر اقتدائی

همچنین ببینید

تشخیص اشیا با داده های اندک برای کاربرد سنجش از راه دور

تشخیص اشیا با داده های اندک برای کاربرد سنجش از راه دور

تشخیص اشیا یک مساله قدیمی در زمینه سنجش از راه دور و بینایی رایانه ای …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *