دستورات پردازش تصویر در متلب : سورس متلب

سورس متلب :

تابع imread()

هدف :

هدف از این تابع خواندن تصویر از فایل می باشد.

تابع imshow()

هدف :

هدف از این تابع نمایش تصویر می باشد.

از توابع (imshow) ،(imread) و (imwrite) در متلب، برای خواندن تصاویر در محیط متلب، نمایش تصاویر در «میز‌کار» (Desktop) متلب و ذخیره‌سازی تصاویر در دایرکتوری کنونی متلب استفاده می‌شود. در صورتی که تصویر مورد نظر، دقت پیکسلی برابر یا ۲۵۶×۲۵۶ و در فضای «سطح خاکستری» (Greyscale) تعریف شده باشد، ماتریس حاصل از اجرای دستور (imread)، ابعادی برابر با ۲۵۶×۲۵۶ یا ۶۵۵۵۳۶ عنصر خواهد داشت.

تابع ()subplot

هدف :

جهت نمایش تصاویر بطور همزمان و در یک پنجره.

تابع ()title

هدف :

جهت نمایش توضیحات در مورد آخرین تصویر نمایش داده شده.

تابع () figure

هدف :

جهت نمایش تصویر در پنجره های جداگانه. در صورتی که بخواهیم خروجی دستور imshow در پنجره ای جدید باز شود از این دستور استفاده می شود.

تابع()imwrite



هدف :

هدف از این تابع ذخیره تصویر بصورت فایل می باشد.

تابع ()iminfo

هدف :

نمایش اطلاعات تصویر.

تابع imtool()

هدف :

نمایش اطلاعات تصویر.

علاوه بر نمایش تصویر در دو پنجره دیگر امکاناتی جهت مشاهده کد رنگ یک پیکسل و خط کش وجود دارد.

مقادیر سطح خاکستری تمامی پیکسل‌های موجود در تصویر سطح خاکستری، در ماتریسی به نام F و با ابعاد ۲۵۶×۲۵۶ ذخیره می‌شود. از این به بعد، ماتریس F یک «متغیر» (Variable) متلب محسوب می‌شود و می‌توان عملیات ماتریسی مختلفی بر روی آن انجام داد. در صورتی که دستور زیر (شکل دوم) اجرا شود:

۱ G = imread ( Penguins_RGB . jpg ) ;

یک تصویر رنگی در «فضای رنگی» (Color Space) به نام RGB تعریف و در متغیر G ذخیره می‌شود. تفاوت خروجی این دستور با خط دستوری قبلی این است که در این حالت، مقادیر پیکسلی شامل لیستی از سه مقدار خواهند بود. هر کدام از مقادیر سه‌گانه پیکسلی، متناظر با مقادیر مؤلفه‌های قرمز، سبز و آبی رنگ یک پیکسل داده شده هستند. بنابراین، ماتریس G یک ماتریس سه‌بعدی با ابعاد ۲۵۶x256x3 خواهد بود. به طور خلاصه، تابع (imread) مقادیر پیکسلی را از یک فایل تصویر می‌خواند و ماتریس حاوی تمامی مقادیر پیکسلی را خروجی می‌دهد.

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

۱ [ M , N ] = size ( f )

این دستور، تعداد سطرها (M) و تعداد ستون‌های (N) تصویر را در خروجی نمایش می‌دهد. همچنین، با استفاده از دستور (whos Variable_Name) اطلاعات اضافی مرتبط با یک تصویر دوبعدی نمایش داده خواهد شد. به عنوان نمونه:

۱ whos G

نام متغیر اندازه بایت‌ها مشخصه‌های کلاسی G ۷۶۸×۱۰۲۴×۳ ۲۳۵۹۲۹۶ uint8

۱ whos F

نام متغیر اندازه بایت‌ها مشخصه‌های کلاسی F ۷۶۸×۱۰۲۴ ۷۸۶۴۳۲ uint8

نمایش تصاویر در متلب

با استفاده از تابع (imshow)، امکان نمایش تصاویر در میز‌کار متلب فراهم شده است. قالب دستوری این تابع به شکل زیر است:

۱ imshow ( Var_Name )

در این دستور، متغیر Var_Name یک آرایه تصویری از نوع داده‌ای (uint8) یا double است. نوع داده‌ای uint8، مقادیر اعداد صحیح ذخیره شده در متغیر Var_Name را به مقادیری بین ۰ و ۲۵۵ محدود می‌کند. شایان توجه است که برای یک ماتریس از نوع double، تابع (imshow) انتظار دارد که مقادیر عناصر این ماتریس، بین صفر و یک باشند (مقدار صفر، رنگ سیاه و مقدار ۱، رنگ سفید است). هر مقداری که بین ۰ و ۱ قرار داشته باشد، با رنگ سطح خاکستری (grayscale) نمایش داده می‌شود. مقادیر بزرگتر از ۱، با رنگ سفید و مقادیر کوچکتر از ۰ نیز با رنگ سیاه نمایش داده خواهند شد. برای اینکه مقادیر عناصر ماتریسِ متناظر با یک تصویر، در بازه صفر و یک قرار بگیرند، می‌توان از روش‌های نرمال‌سازی یا استانداردسازی داده‌ها استفاده کرد.

برای بهبود «کنتراستِ» (Contrast) تصاویری که «محدوده پویای پایینی» (Low Dynamic Range) دارند، می‌توان از دستور زیر استفاده کرد:

۱ imshow ( Var_Name , [ ] )

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

تابع «ابزار تصویر» (Image Tool) که در تولباکس پردازش تصویر در متلب موجود است، محیط تعاملی‌تر برای مشاهده تصاویر و کاوش اطلاعات درون آن‌ها، برای کاربران ایجاد می‌کند. با استفاده از این تابع، اطلاعاتی نظیر مقادیر پیکسل‌ها، محاسبه فاصله میان دو پیکسل موجود در تصویر و برخی دیگر از عملیات محاسباتی مفید، در اختیار کاربران قرار می‌گیرد. با استفاده از دستورات زیر:

۱ ۲ B = imread ( Penguins_grey . jpg ) ; imtool ( B )

ابتدا، تصاویر در محیط متلب خوانده می‌شوند. سپس، با استفاده از دستور تابع (imtool) اطلاعات مرتبط با تصویر خوانده شده نمایش داده خواهد شد. همان طور که در شکل زیر قابل مشاهده است، با اجرای خط دستوری بالا (تابع imtool)، پنجره‌ای نمایان خواهد شد. در نتیجه اجرای این تابع و ظاهر شدن پنجره، اطلاعات «مکان‌نمای ماوس» (Mouse Cursor) و مقدار پیکسلی که ماوس بر روی آن قرار دارد، در گوشه پایین تصویر نمایش داده خواهد شد.

با استفاده از ابزار «محاسبه فاصله» (Measure Distance) در تابع (imtool)، این امکان برای کاربر فراهم شده است تا فاصله میان دو نقطه انتخاب شده در تصویر را (به عنوان نمونه، فاصله میان منقارهای دو پنگوئن) محاسبه کنند.

با استفاده از ابزار «ناحیه پیکسلی» (Pixel Region) در تابع (imtool)، تک تک پیکسل‌های موجود در یک ناحیه کوچک از تصویر، به همراه اطلاعات رنگی (مقادیر شدت رنگی پیکسل‌ها و مقادیر کانال‌های رنگ قرمز، سبز و آبی) پیکسل‌های آن ناحیه نمایش داده خواهد شد.

با استفاده از تابع (subplot)، این امکان فراهم شده است تا چندین تصویر در یک شکل نمایش داده شوند. تابع (subplot) سه پارامتر ورودی دارد: دو پارامتر اول، تعداد سطرهای و ستون‌های لازم برای تقسیم‌بندی یک شکل را مشخص می‌کنند و پارامتر سوم، مشخص می‌کند که کدام زیر قسمت، باید برای نمایش یکی از تصاویر مورد استفاده قرار بگیرد. به عنوان نمونه، دستور (subplot(3,2,3 برای متلب مشخص می‌کند که باید شکل به سه سطر و دو ستون تقسیم‌بندی و از زیر سمت سوم، برای نمایشِ یکی از تصاویر موجود در شکل استفاده شود. برای نمایش دو تصویر (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 )

ذخیره کردن تصاویر در متلب

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

۱ imwrite ( Var_Name , ‘ filename ’ ) ;

این دستور، داده متناظر با تصویر (Var_Name) را در فایلی که به وسیله متغیر (filename) به آن اشاره می‌شود (در دایرکتوری کنونی متلب)، ذخیره می‌کند. تابع (imwrite)، از غالب فرمت‌های تصویری شناخته شده برای ذخیره تصویر نظیر (JPG ،PBM ،BMP ،PGM ،PNG ،PNM ،PPM ،TIFF) پشتیبانی می‌کند. به عنوان نمونه، با استفاده از دستور زیر، یک آرایه ۱۰۰×۱۰۰ از مقادیر سطح خاکستری را در یک فایل به نام random و با فرمت PNG ذخیره می‌شود.

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

برای ذخیره‌سازی تصاویر در فرمت JPEG، از قالب دستوری زیر استفاده می‌شود:

۱ imwrite ( F , ‘ filename . jpg ’ , ‘ quality ’ , q )

در این دستور، پارامتر q مقداری صحیح بین ۰ و ۱۰۰ است. از این پارامتر، برای کاهش حجم تصویر استفاده می‌شود. پارامتر q، یک پارامتر «موازنه» (Trade-off) محسوب می‌شود و توازن لازم را میان حجم و کیفیت تصویر ایجاد می‌کند. به عنوان نمونه، با استفاده از دستورات زیر، می‌توان تصویر (Penguins_grey.jpg) را با فرمت JPEG در سه کیفیت ۷۵ (حجم و کیفیت معمولی)، ۹۰ (حجم زیاد و کیفیت بالا) و ۱۰ (حجم کم و کیفیت پایین) ذخیره‌سازی کرد. نکته مهم در این زمینه این است که مقدار ۷۵، مقدار «پیش‌فرض» (Default) برای پارامتر q است.

۱ ۲ ۳ ۴ ۵ ۶ ۷ 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 ’ , ۹۰ ) ;

نمایش اطلاعات تصاویر در متلب

با استفاده از تابع (imfinfo)، فیلدهای اطلاعاتی مرتبط با یک تصویر را می‌توان در یک «متغیر ساختاری» (Structural Variable) ذخیره و در محاسباتی آتی مورد استفاده قرار داد. به عنوان نمونه، با استفاده از دستور زیر، کلیه اطلاعات مرتبط با تصویر (Penguins_grey.jpg) در متغیری به نام (Var_Name) ذخیره می‌شود:

۱ K = imfinfo ( ‘ Penguins_grey . jpg ’ )

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

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

دقیق کردن و نمایان‌سازی تصاویر (Image Sharpening)

«حذف کردن نویز» (Noise Removal)

تصحیح لکه‌ها و تار شدگی‌های موجود در تصویر (Deblurring)

«استخراج لبه‌ها» (Edge Extraction)

باینری کردن تصاویر (Binarization)

بهبود کنتراست تصاویر دیجیتالی (Contrast Enhancement)

بخش‌بندی تصاویر و برچسب‌گذاری اشیاء موجود در آن‌ها (Object Segmentation and Labeling)

دقیق کردن و نمایان‌سازی ویژگی‌های بارز موجود در تصاویر

در تکنیک‌های دقیق کردن و نمایان‌سازی تصاویر، لبه‌ها و جزئیات ظریف موجود در تصویر، برای مشاهده انسانی تقویت می‌شوند. در این دسته از روش‌ها، کنتراست میان نواحی تاریک و روشن افزایش می‌یابد تا ویژگی‌های بارز موجود در تصویر خودنمایی کنند. به عبارت دیگر، در این دسته از روش‌های پردازش تصویر، «فیلتر‌های بالاگذر» (High-Pass Filter) بر روی تصاویر دیجیتالی اعمال می‌شوند تا مهم‌ترین ویژگی‌های موجود در تصویر (نظیر لبه‌ها)، واضح‌تر شوند.

حذف کردن نویز

روش‌های حذف نویز از تصاویر دیجیتالی، جزء روش‌های پرکاربرد پیش‌پردازشی هستند و معمولا، پیش از اعمال روش‌های پردازش تصویر در متلب مورد استفاده قرار می‌گیرند. معمولا پیش از پردازش تصویر، از این دسته از تکنیک‌ها، برای کاهش میزان نویز در تصویر استفاده می‌شود. روش‌های حذف نویز نقش مهمی در پردازش و تفسیر تصاویر دیجیتالی دارند؛ زیرا، اجازه استخراج اطلاعات مفید را از تصویر می‌دهند. تصاویر حاصل شده از دوربین‌های دیجیتال و فیلم‌های دوربین‌های سنتی، حاوی نویزهای مختلف از منابع متفاوتی هستند. نویزهایی نظیر «نویز فلفل-نمکی» (Salt-and-Pepper Noise) و «نویز گاوسی» (Gaussian Noise)، مهم‌ترین منابع ایجاد نویز در تصاویر هستند.

به طور کلی، نویزها به دو دسته «نویزهای همبسته» (Correlated Noise) و «نویزهای ناهمبسته» (Uncorrelated Noise) تقسیم‌بندی می‌شوند. در بیشتر موارد، مقادیر نویز در پیکسل‌های مختلف تصویر، به شکلی مدل شده‌اند که مستقل از هم هستند و لی از توزیع یکسان تبعیت می‌‎کنند. به این دسته از نویزها، نویزهای ناهمبسته گفته می‌شود. در هنگام انتخاب الگوریتم حذف نویز از تصاویر، باید به نکاتی نظیر «قدرت محاسباتی» (Computing Power) سیستم پردازش تصویر، زمان محاسباتی لازم برای حذف نویزها و از همه مهم‌تر، موازنه میان از بین رفتن جزئیات موجود در تصویر و حذف نویز توجه شود.

تصحیح لکه‌ها و تار شدگی‌های موجود در تصویر

در این دسته از روش‌های پردازش تصویر، «مصنوعات تار شده» (Blurring Artifacts)، نظیر تارشدگی‌های موجود در تصویر که در اثر حرکت پدید آمده‌اند، از تصویر حذف می‌شوند. این فرایندها تکراری هستند و برای رسیدن به جواب مطلوب، ممکن است چندین بار تکرار شوند. به عبارت دیگر، فرایندهای موجود در این دسته از روش‌ها، آنقدر تکرار می‌شوند تا تصویر حاصل، تقریب مناسبی از تصویر اصلی شود. این دسته از روش‌ها، به عنوان فرایندهای پیش پردازشی و معمولا، پیش از پردازش تصویر در متلب، مورد استفاده قرار می‌‌گیرند.

استخراج لبه‌ها از تصاویر

این دسته از روش‌ها که به آن‌ها روش‌های «تشخیص لبه» (Edge Detection) نیز گفته می‌شود، یکی از مهم‌ترین روش‌های پردازش تصویر در متلب محسوب می‌شوند. از روش‌های استخراج لبه، برای جداسازی «اشیاء» (Objects) موجود در تصویر استفاده می‌شود. در روش‌های تشخیص لبه، هدف، شناسایی نقاطی در تصاویر دیجیتال است که در این نقاط، «روشنایی تصویر» (Image Brightness) نسبت به نقاط همسایه، به شدت تغییر می‌کند. روش‌های تشخیص لبه، به دو دسته روش‌های «مبتنی بر جستجو» (Search-based) و «مبتنی بر عبور از صفر» (Zero-Crossing-based) تقسیم‌بندی می‌شوند.

در روش‌های مبتنی بر جستجو، ابتدا قدرت لبه‌ها با استفاده از معیارهایی نظیر «اندازه گرادیان» (Gradient Magnitude) محاسبه می‌شود (معمولا، از طریق محاسبه مشتق مرتبه اول). سپس، با استفاده از تخمین محاسبه شده از «جهت محلی» (Local Orientation) لبه‌ها (جهت گرادیان)، «بیشینه جهت‌دار محلی» (Local Directional Maxima) متناظر با اندازه گرادیان‌ جستجو و لبه‌ها شناسایی می‌شوند.

در روش‌های مبتنی بر عبور از صفر، نقاط عبور از صفر موجود در مشتق مرتبه دوم محاسبه شده از تصویر، جستجو خواهند شد و از این طریق، لبه‌های موجود در تصاویر شناسایی می‌شوند. روش‌هایی نظیر تشخیص لبه Canny، عملگر Prewitt و عملگر Sobel، جزء روش‌های تشخیص لبه مبتنی بر مشتق مرتبه اول هستند.

باینری کردن تصاویر

باینری کردن تصاویر به فرایندی اطلاق می‌شود که در آن، تصاویر سطح خاکستری (greyscale) به تصاویر «سیاه و سفید» (Black and White) تبدیل می‌شوند. استفاده از «حد آستانه» (Threshold)، یکی از محبوب‌ترین تکنیک‌های تبدیل تصاویر سطح خاکستری به تصاویر سیاه و سفید است. این دسته از روش‌ها، جزء ساده‌ترین و البته، پرکاربردترین روش‌های پردازش تصویر در متلب محسوب می‌شوند.

بهبود کنتراست تصاویر دیجیتالی

در روش‌های بهبود کنتراست، با هدف بهتر شدن دید انسانی از تصاویر و همچنین، بهبود فرایندهای پردازش تصویر، تصاویر دیجیتال مورد پردازش قرار می‌گیرند. در این دسته از روش‌های پردازش تصویر در متلب، با در نظر گرفتن سیستم رنگ دستگاه‌های نمایشی یا واسط‌های خروجی تصویر و بهینه‌سازی تصاویر دیجیتال برای نمایش در آن‌ها، ویژگی‌های موجود در تصویر پررنگ‌تر می‌شوند. در روش‌های بهبود کنتراست تصاویر دیجیتالی، «محدوده» (Range) مقادیر کنتراست در تصویر، توسط فرایندهای خاصی تغییر می‌یابد. این دسته از روش‌ها، جزء مهم‌ترین روش‌های پردازش تصویر در متلب به حساب می‌آیند.

بخش‌بندی تصاویر و برچسب‌گذاری اشیاء موجود در آن‌ها

پیاده‌سازی سیستم‌های بخش‌بندی تصاویر و برچسب‌گذاری اشیاء موجود در آن‌ها، پیش‌شرط لازم برای توسعه یک سیستم «بازشناسی و دسته‌بندی اشیاء» (Object Recognition and Classification) محسوب می‌شود. این دسته از روش‌ها، جزء مهم‌ترین روش‌های پردازش تصویر در متلب به حساب می‌آیند. در بخش‌بندی تصاویر دیجیتال، هر کدام از پیکسل‌های موجود در تصویر، توسط دو یا چند برچسب کلاسی، «برچسب‌گذاری» (Labelling) می‌شوند. به عبارت دیگر، بخش‌بندی تصاویر دیجیتال به فرایند تقسیم‌بندی تصویر دیجیتال به چندین بخش یا مجموعه اطلاق می‌شود (به عنوان نمونه، مجموعه‌ای از پیکسل‌ها، که به آن‌ها اَبَر پیکسل نیز گفته می‌شود). هدف این دسته از فرایندها، ساده‌سازی یا تغییر «نمایش کنتراستی» (Contrast Representation) تصویر به مدلی است که تحلیل آن ساده‌تر و بامعنی‌تر باشد. به محض اینکه اشیاء مرتبط بخش‌بندی و برچسب‌گذاری شدند، ویژگی‌های مهم موجود در آن‌ها، جهت دسته‌بندی، مقایسه، خوشه‌بندی یا بازشناسی اشیاء مرتبط، استخراج می‌شوند.

انواع تصاویر

در تولباکس پردازش تصویر در متلب و توابع موجود در آن، چهار نوع تصویر پشتیبانی می‌شود:

تصاویر سطح خاکستری ( Grayscale | Grey-level Images)

تصاویر باینری (Binary Images)

تصاویر شاخص‌گذاری شده (Indexed Images)

تصاویر RGB

تصاویر سطح خاکستری

در این دسته از تصاویر، که به آن‌ها تصاویر «تک‌رنگ» (Monochrome) نیز گفته می‌شود، از ۸ بیت برای نمایش مقدار شدت رنگ هر پیکسل استفاده می‌شود؛ پیکسل با مقدار شدت برابر با صفر، رنگ سیاه را نمایش می‌دهد. همچنین، پیکسل با مقدار شدت برابر با ۲۵۵، رنگ سفید خواهد بود. در نهایت، پیکسل‌هایی که مقادیری بین ۰ و ۲۵۵ دارند، طیف‌های خاکستری را نمایش می‌دهند. تصاویر سطح خاکستری، توسط آرایه‌های دوبعدی و مقادیر پیکسل‌ها نیز، توسط یک عدد ۸ بیتی نمایش داده می‌شوند.

تصاویر باینری

در این دسته از تصاویر، از تنها ۱ بیت برای نمایش مقدار پیکسل‌ها استفاده می‌شود؛ مقدار ۱، به معنای رنگ سفید و مقدار ۰، به معنای رنگ سیاه. تصاویر سیاه و سفید نیز توسط آرایه‌های دوبعدی نمایش داده می‌شوند. حجم کم این دسته از تصاویر، مهم‌ترین مزیت آن‌ها محسوب می‌شود.

تصاویر شاخص‌گذاری شده

این تصاویر، ماتریسی از مقادیر «صحیح» (Integer) هستند. در این ماتریس، هر مقدار صحیح به یک سطر خاص از مقادیر RGB، در یک ماتریس («نقشه» (Map)) ثانویه به نام «نقشه رنگ» (Colour Map) اشاره دارد.

تصاویر RGB

در تصاویر RGB، هر پیکسل رنگی توسط یک سه‌تایی مشخص کننده مؤلفه‌های قرمز (R)، سبز (G) و آبی (B) آن پیکسل، نمایش داده می‌شود. در تولباکس پردازش تصویر در متلب و توابع آن، هر تصویر رنگی RGB متناظر با یک آرایه سه‌بعدی به ابعاد MxNx3 است. در اینجا، M بیانگر ارتفاع و N، نشان دهنده پهنای تصویر است. همچنین، عدد ۳ بیانگر تعداد مؤلفه‌های رنگی تصویر RGB است. در تصاویر RGB از نوع double، محدوده مقادیر شدت پیکسل‌ها، بازه [۰ و ۱] است. در تصویر RGB از نوع Unit8 و Unit16، محدوده مقادیر به ترتیب برابر با بازه [۰ و ۲۵۵] و [۰ و ۶۵۵۳۵] است.

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

کیفیت تصویر

«کیفیت تصویر» (Image Quality) در فرایند پردازش تصویر، بر حسب مفاهیمی نظیر «تفکیک مکانی» (Spatial Resolution) و کوانتیزه‌سازی تعریف می‌شود.

تفکیک مکانی یا دقت پیکسلی تصویر

منظور از تفکیک مکانی، «چگالی پیکسلی» (Pixel Density) در تصویر است. هر چقدر که تفکیک مکانی یک تصویر بیشتر باشد، بدین معنی است که پیکسل‌های بیشتری برای نمایش تصویر مورد استفاده قرار گرفته شده است. تفکیک مکانی یک تصویر، به طور کیفی، بر اساس معیاری به نام «نقطه در اینچ» (Dot per Inch | DPI) بیان می‌شود.

با استفاده از تابع (imresize)، می‌توان قدرت تفکیک یا به عبارت دیگر، دقت پیکسلی یک تصویر را تغییر داد. به عنوان نمونه، با استفاده از دستور زیر، ابعاد یک تصویر به نصف کاهش پیدا می‌کند. ویژگی مهم تابع (imresize) این است که در ماتریس‌های چندبعدی متناظر با تصویر (نظیر تصاویر RGB که سه‌بعدی هستند)، به طور پیش‌فرض، تنها دو بعد اول ماتریس تغییر پیدا می‌کنند.

۱ imresize ( x , 1 / 2 )

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

۱ imresize ( x , 2 )

با استفاده از تابع (imresize)، تغییرات دلخواه در قدرت تفکیک یا دقت پیکسلی تصاویر قابل اعمال است. به عنوان نمونه، دستور زیر قدرت تفکیک یا دقت پیکسلی تصویر را نصف می‌کند ولی تغییری در ابعاد تصویر ایجاد نمی‌کند.

۱ mresize ( imresize ( x , 1 / 2 ) , 2 )

همچنین، خط دستوری زیر، قدرت تفکیک یا دقت پیکسلی تصویر را به اندازه یک چهارم (۱۴۱۴) تغییر می‌دهد.

۱ imresize ( imresize ( x , 1 / 4 ) , 4 )

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

دستور زیر، قدرت تفکیک یا دقت پیکسلی تصویر (Penguins_grey.jpg) را به نصف تغییر می‌دهد.

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; A1 = imresize ( ( imresize ( A , 1 / 2 ) ) , 2 ) ; imshow ( A1 )

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; A2 = imresize ( ( imresize ( A , 1 / 4 ) ) , 4 ) ; imshow ( A2 )

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; A3 = imresize ( ( imresize ( A , 1 / 8 ) ) , 8 ) ; imshow ( A3 )

کوانتیزه‌سازی تصویر

سورس متلب «کوانتیزه‌سازی تصویر» (Image Quantisation) را می‌توان در قالب یک فرایند «نگاشت» (Mapping) توصیف کرد که در آن، مجموعه‌ای از نقاط داده‌ای (مجموعه‌ای از پیکسل‌ها که در یک محدوده سطح خاکستری مشخصی قرار دارند) به یک نقطه (یک مقدار سطح خاکستری خاص) نگاشت می‌شوند. برای «بازکوانتیزه‌سازی» (Requantization) تصویر در متلب، می‌توان از تابع (grayslice) در تولباکس پردازش تصویر در متلب استفاده کرد. با استفاده از مجموعه دستورات زیر، سطوح کوانتیزه‌سازی تصویر (Penguins_grey.jpg) به ۶۴ کاهش پیدا می‌کند و تصویر حاصل در خروجی نمایش داده می‌شود.

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; B = grayslice ( A , 64 ) ; imshow ( B , gray ( 64 ) )

مجموعه دستورات زیر، سطوح کوانتیزه‌سازی تصویر (Penguins_grey.jpg) را به ۸ کاهش و تصویر حاصل را در خروجی نمایش می‌دهند.

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; B = grayslice ( A , 8 ) ; imshow ( B , gray ( 8 ) )

هیستوگرام تصویر

«هیستوگرام» (Histogram) یک تصویر سطح خاکستری، «تناوب» (Frequency) رخدادِ مقادیر «سطوح خاکستری» (Grey Levels) در تصویر را نمایش می‌دهد. هیستوگرام یک نمایش گرافی است که تعداد دفعات رخدادِ هر یک از مقادیر سطح خاکستری موجود در تصویر را بیان می‌کند. در یک تصویر تاریک، سطوح خاکستری (و در نتیجه، هیستوگرام تصویر) بیشتر در حد پایین مقادیر (نزدیک به صفر) تجمع پیدا می‌کنند. در حالی که در تصویری به شکل یکنواخت روشن است، سطوح خاکستری (هیستوگرام تصویر) بیشتر در حد بالای مقادیر (نزدیک به ۲۵۵) تجمع پیدا می‌کند. در تصاویری که از «کنتراست» (Contrast) خوبی برخوردارند، سطوح خاکستری (هیستوگرام تصویر) تقریبا به خوبی در محدوده تعریف شده برای مقادیر سطح خاکستری (۰ تا ۲۵۵) پخش شده‌اند.

با استفاده از تابع (imhist)، هیستوگرام یک تصویر در تولباکس پردازش تصویر در متلب نمایش داده می‌شود. به عنوان نمونه، با استفاده از دستورات زیر، هیستوگرام تصویر (Penguins_grey.jpg) در خروجی نمایش داده خواهد شد.

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; figure ( 1 ) , imhist ( A ) ;

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

روش Histogram Stretching

روش Histogram Shrinking

روش Histogram Sliding

روش Histogram Stretching

در این روش، که به آن «برش ورودی» (Input Cropping) نیز گفته می‌شود،سورس متلب از یک تبدیل خطی برای «کشش» (Stretch) بخش‌هایی از هیستوگرام اصلی تصویر استفاده می‌شود. هدف از این عملیات، گسترش دادن محدوده «غیر صفر» (Non-Zero) مقادیر شدتِ پیکسل‌های تصویر به تمامی سطوح سطح خاکستری است.

در صورتی که هیستوگرام یک تصویر، در مرکز محدوده تعریف شده برای مقادیر سطح خاکستری (۰ تا ۲۵۵)، تجمع پیدا کرده باشد، با استفاده از تابع (imadjust) امکان کشش یا Stretch بخش‌هایی از هیستوگرام آن تصویر وجود دارد. با استفاده از قالب دستوری زیر، عملیات کشش هیستوگرام یک تصویر، در تولباکس پردازش تصویر در متلب انجام می‌شود. در این قالب دستوری، مقادیر پارامترهای d ،c ،b ،a باید بین ۰ و ۱ باشند.

۱ imadjust ( Var_Name , [ a , b ] , [ c , d ] )

به عنوان نمونه، دستور زیر، مقادیر سطح خاکستری تصویر را معکوس می‌کند و از این طریق، تصاویری مشابه «فیلم عکاسی» (Photographic Negative) تولید می‌شود.

۱ imadjust ( Var_Name , [ ] , [ 1 , 0 ] )

سورس متلب راه حل جایگزین برای کشش یا Stretch بخش‌هایی از هیستوگرام تصویر، استفاده از روش «یکنواخت‌سازی هیستوگرام» (Histogram Equalization) یا تابع (histeq) در تولباکس پردازش تصویر در متلب است. این روش، بر خلاف روش Histogram Stretching که نیازمند تعیین دستی پارامترها توسط کاربر است، به طور خودکار انجام می‌شود. نحوه استفاده از تابع (histeq) و نمایش هیستوگرام اصلاح شده در ادامه آمده است:

۱ ۲ ۳ A = imread ( ‘ Penguins_grey . jpg ’ ) ; HE = histeq ( A ) ; imshow ( HE ) , figure , imhist ( HE )

روش Histogram Shrinking

در این روش، که به آن «برش خروجی» (Output Cropping) نیز گفته می‌شود، هیستوگرام اصلی تصویر به گونه‌ای تغییر پیدا می‌کند که محدوده فعلی مقادیر سطح خاکستری در تصویر، به محدوده سطح خاکستری باریک‌تری فشرده‌سازی می‌شود. برای چنین کاری، از تابع (imadjust) در تولباکس پردازش تصویر در متلب استفاده می‌‌شود.

روش Histogram Sliding

در روش Histogram Sliding، یک «مقدار ثابت روشنایی» (Constant Brightness Value) به تمامی پیکسل‌های موجود در تصویر اضافه یا از تمامی آن‌ها کسر می‌شود. در تصاویر حاصل، ویژگی‌های کنتراستی بهتر از تصویر اصلی است؛ با این حال، سطح روشنایی آن‌ها، نسبت به میانگین روشنایی تصویر اصلی، بیشتر یا کمتر است. در هنگام استفاده از روش Histogram Sliding در متلب، باید اطمینان حاصل شود که مقادیر پیکسل‌ها، از محدوده مجاز تعریف شده برای مقادیر سطح خاکستری (۰ تا ۲۵۵) فراتر نروند. در مجموعه دستورات زیر، از روش Histogram Sliding برای بهبود تصویر (Penguins_grey.jpg) استفاده شده است.

۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ A = imread ( ‘ Penguins_grey . jpg ’ ) ; imshow ( A ) , title ( ‘ Original Image ’ ) ; B = im2double ( A ) ; bright_add = 0.2 ; imhist ( A ) , title ( ‘ Original Histogram ’ ) ; C = B + bright_add ; imshow ( C ) , title ( ‘ New Bright Image ’ ) ; imhist ( C ) , title ( ‘ New Histogram ’ ) ;

در این مثال، تصویر اصلی، از طریق اضافه کردن مقدار ثابت ۰٫۲ به تمامی پیکسل‌های موجود در تصویر، روشن‌تر شده است.

روش آستانه‌گذاری در تولباکس پردازش تصویر در متلب

از روش «آستانه‌گذاری» (Thresholding)، برای حذف اطلاعات غیر ضروری و تمرکز روی اطلاعات اساسی در تصویر استفاده می‌شود. همچنین، در صورتی که اشیاء موجود در تصویر و «پس‌زمینه» (Background) سطوح خاکستری مشابهی داشته باشند، از این روش، برای نمایان کردن جزئیات مخفی در تصویر استفاده می‌شود. روش‌های آستانه‌گذاری، به دو دسته روش‌های «تک آستانه‌گذاری» (Single Thresholding) و «آستانه‌گذاری دوگانه» (Double Thresholding) تقسیم‌بندی می‌شوند. روش‌های تک آستانه‌گذاری و آستانه‌گذاری دوگانه، در تولباکس پردازش تصویر در متلب پیاده‌سازی شده‌اند.

روش‌ تک آستانه‌گذاری

در این روش، تصاویر سطح خاکستری از طریق مراحل زیر به تصاویر باینری (سیاه و سفید) تبدیل می‌شوند:

ابتدا، یک سطح خاکستری، نظیر T، در تصویر اصلی انتخاب می‌شود. به این سطح خاکستری، حد آستانه گفته می‌شود.

سپس، تمامی پیکسل‌های تصویر، بسته به اینکه مقدار سطح خاکستری آن‌ها از حد آستانه کمتر یا بیشتر باشند، سیاه یا سفید می‌شوند.

آستان‌گذاری، یکی از مراحل اصلی روش‌های «بخش‌بندی تصاویر» (Image Segmentation) است. در این دسته از روش‌‌ها، کاربر تمایل دارد تا اشیاء را از پس‌زمینه جدا کند. برای تبدیل یک تصویر سطح خاکستری (نظیر F)، به یک تصویر باینری، با استفاده از حد آستانه ۱۰۰ از دستور زیر استفاده می‌شود.

۱ G = F > 100

در ادامه، تصویر سطح خاکستری (Penguins_grey.jpg)، با استفاده از حد آستانه ۷۰، به تصویر سیاه و سفید تبدیل می‌شود.

۱ ۲ A = imread ( ‘ Penguins_grey . jpg ’ ) ; imshow ( A ) , figure , imshow ( A > 70 )

علاوه بر این، دستوری در تولباکس پردازش تصویر در متلب وجود دارد که به کاربران اجازه می‌دهد تا تصاویر سطح خاکستری و رنگی را به تصاویر باینری تبدیل کنند. برای این کار از تابع (im2bw) استفاده می‌شود. در این تابع، آرگومان level مقداری بین ۰ و ۱ دارد.

۱ im2bw ( image , level )

روش آستانه‌گذاری دوگانه

در این روش، به جای یک حد آستانه، دو حد آستانه T1 و T2 تعریف می‌شود. در صورتی که مقدار سطح خاکستری یک پیکسل بین دو حد آستانه T1 و T2 باشد، پیکسل سفید خواهد شد. در صورتی که مقدار پیکسل خارج از این محدوده باشد، پیکسل سیاه خواهد شد.

دقیق کردن و نمایان‌سازی ویژگی‌های بارز موجود در تصاویر (Image Sharpening)

به این دسته از روش‌ها، روش‌های Image Sharpening نیز گفته می‌شود. این روش‌ها، ابزارهایی قدرتمند برای بهتر جلوه دادن «بافت» (Texture) در تصاویر هستند. این روش‌ها قادر هستند کیفیت تصویر را، حتی بهتر از امکانات سخت‌افزاری موجود در دوربین‌های گران قیمت بازار بهبود ببخشند. در بسیاری از نرم‌افزارهای Image Sharpening، از تکنیکی به نام Unsharp Masking جهت نمایان‌سازی ویژگی‌های بارز موجود در تصاویر (به ویژه بافت‌ها) استفاده می‌شود. در این روش، تفاوت روشنایی در راستای لبه‌های درون یک تصویر، پررنگ‌تر می‌شود. شایان توجه است که روش‌های Image Sharpening قادر به بازسازی تصویر ایده‌آل نیستند، با این حال، لبه‌های موجود در تصاویر تغییر یافته به مراتب پررنگ‌تر از تصاویر اصلی خواهند بود.

از تابع (imsharpen)، برای دقیق کردن و نمایان‌سازی ویژگی‌های شاخص تصاویر (در تولباکس پردازش تصویر در متلب) استفاده می‌شود.

۱ B = imsharpen ( A )

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

۱ ۲ ۳ ۴ a = imread ( ‘ Image_sharpen . jpg ’ ) ; imshow ( a ) = imsharpen ( a ) ; figure , imshow ( b )

همچنین، این امکان فراهم شده است تا پارامترهای «شعاع» (Radius) و «مقدار» (Amount) در تابع (imsharpen)، توسط کاربر مقداردهی شوند.

۱ ۲ ۳ b = imsharpen ( a , ’ Radius ’ , ۴ , ’ Amount ’ , ۲ ) ; figure , imshow ( b )

همان طور که در این شکل مشخص است، ویژگی‌های تصویر بالا (نظیر اشیاء و لبه‌های آن‌ها) نسبت به دو تصویر قبلی، به مراتب پررنگ‌تر شده است و به شکل بهتری در تصویر نمایان شده‌اند؛ به گونه‌ای که تمایز قائل شدن میان اشیاء در این تصویر به مراتب راحت‌تر است.

جمع‌بندی

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