پردازش تصویر در متلب — راهنمای جامع

۸۳۷۲ بازدید
آخرین به‌روزرسانی: ۱۶ اسفند ۱۴۰۱
زمان مطالعه: ۲۱ دقیقه
پردازش تصویر در متلب — راهنمای جامع

در این مطلب، با مبحث پردازش تصویر در متلب آشنا خواهید شد. همچنین، بسیاری از مفاهیم پایه و تعدادی از مفاهیم و موضوعات پیشرفته پردازش تصویر در متلب ارائه خواهند شد. هدف از این مطلب، پوشش دادن نحوه عملکرد و شیوه استفاده از «توابع» (Functions) یکی از معروف‌ترین «تولباکس‌های» (Toolbox) موجود در «محیط محاسبات عددی» (Numerical Computing Environment) و زبان برنامه نویسی «متلب» (Matlab) است؛ «تولباکس پردازش تصویر» (Image Processing Toolbox | جعبه ابزار پردازش تصویر).

فهرست مطالب این نوشته

در ابتدا، تعریف ابتدایی از «تصاویر دیجیتال» (Digital Images) و محیط برنامه‌نویسی متلب ارائه خواهد شد. سپس، مجموعه‌ای از عملیات ابتدایی پردازش تصویر در متلب مورد بررسی قرار خواهد گرفت. از جمله مهم‌ترین فرایندهای پردازشی مقدماتی روی تصاویر دیجیتال، می‌توان به مواردی نظیر «خواندن تصویر» (Image Reading)، «نمایش تصویر» (Image Display) و «ذخیره‌سازی تصویر» (Image Storing) اشاره کرد. در ادامه نیز، مجموعه‌ای از توابع پردازش تصویر پیشرفته در متلب مورد بررسی قرار خواهد گرفت و چگونگی استفاده از آن‌ها برای پردازش تصویر در متلب شرح داده خواهد شد.

پردازش تصویر چیست ؟

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

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

حوزه پردازش تصویری، یک حوزه «چند رشته‌ای» (Multidisciplinary) در شاخه «علوم کامپیوتر» (Computer Science) است که بخشی از مفاهیم خود را از رشته‌های علمی دیگر نظیر «ریاضیات» (Mathematics)، «فیزیک» (Physics) و «مهندسی برق» (Electrical Engineering) به اشتراک گرفته است. همچنین، حوزه پردازش تصویر، هم‌پوشانی بسیار زیادی با حوزه‌های تحقیقاتی نظیر «بازشناسی الگو» (Pattern Recognition)، «یادگیری ماشین» (Machine Learning)، «هوش مصنوعی» (Artificial Intelligence) و «بینایی کامپیوتر» (Computer Vision) دارد.

برای انجام عملیات محاسباتی متناظر با پردازش تصویر در متلب، ابتدا باید تصاویر دیجیتال از طریق «واسط‌هایی» (Interfaces) نظیر «اسکنر نوری» (Optical Scanner) و «دوربین‌های دیجیتال» (Digital Cameras) تولید شوند. سپس، تصاویر دیجیتال تولید شده «تحلیل» (Analyze) می‌شوند. در مرحله بعد، تصاویر دیجیتالی از طریق فرآیندهایی نظیر «فشرده‌سازی داده‌ها» (Data Compression)، «بهبود تصاویر» (Image Enhancements)، «فیلتر تصاویر» (Image Filtering) و سایر موارد، مورد «دستکاری عددی» (Numerical Manipulation) قرار گرفته و در نهایت، تصاویر خروجی مطلوب تولید می‌شوند.

«قوه محرکه» (Driving Force) توسعه تکنیک‌های پردازش تصویر در متلب، نیاز محققان این حوزه به «استخراج اطلاعات» (Information Extraction) مفید و بامعنی از تصاویر دیجیتالی و تفسیر آن‌ها است. امروزه، از تکنیک‌های توسعه داده شده در حوزه پردازش تصویر، در شاخه‌های مختلفی نظیر «پزشکی» (Medicine)، «صنعت» (Industry)، «نظامی» (Military)، «دستگاه‌های الکترونیکی کاربردی» (Consumer Electronics) و سایر موارد استفاده می‌شود.

در پزشکی، از تکنیک‌های پردازش تصویر در دستگاه‌ها و روش‌های «تصویربرداری تشخیص پزشکی» (Diagnostic Imaging Modalities) نظیر «برش‌نگاری با انتشار پوزیترون» (Positron Emission Tomography | PET)، «برش‌نگاری محوری کامپیوتر» (Computerised Axial Tomography | CAT)، «تصویربرداری رزونانس مغناطیسی» (Magnetic Resonance Imaging | MRI) و «تصویربرداری رزونانس مغناطیسی کارکردی» (functional Magnetic Resonance Imaging | fMRI) استفاده می‌شود. بسیاری از تکنیک‌های تشخیص پزشکی، توسط الگوریتم‌های پردازش تصویر در متلب پیاده‌سازی می‌شوند.

همچنین، سیستم‌های تولید نظیر سیستم‌های ایمنی، سیستم‌های کنترل کیفیت و سیستم‌های «کنترل وسیله نقلیه خودراهنما» (Automated Guided Vehicle Control) از جمله کاربردهای تکنیک‌های پردازش تصویر در صنعت محسوب می‌شوند.

الگوریتم‌های پیشرفته پردازش تصویر در کاربردهایی نظیر «تشخیص سرباز یا وسیله نقلیه» (Detection of Soldiers or Vehicles)، «هدایت موشک» (Missile Guidance)، «بازشناسی اشیاء» (Object Recognition) و سایر موارد مورد استفاده قرار می‌گیرند. تکنیک‌های «بیومتریک» (Biometric) نظیر بازشناسی اثر انگشت، صورت، دست و عنبیه، به شکل گسترده‌ای توسط «نیروهای امنیتی و اجرای قانون» (Law Enforcement and Security) به کار گرفته می‌شوند. بسیاری از روش‌های مورد نیاز برای پیاده‌سازی چنین کاربردهایی، از طریق الگوریتم‌های پردازش تصویر در متلب قابل پیاده‌سازی هستند.

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

متلب چیست ؟

محیط محاسبات عددی و زبان برنامه‌نویسی «متلب» (MATLAB)، که مخفف عبارت «آزمایشگاه ماتریس» (MATrix LABoratory) است، پلتفرمی برای حل مسائل علمی و ریاضیاتی است. متلب یک «زبان برنامه‌نویسی اختصاصی» (Proprietary Programming Language) توسعه داده شده به وسیله شرکت MathWorks است.

در این محیط برنامه‌نویسی، توسعه‌دهندگان قادرند تا از روش‌های «دستکاری ماتریسی» (Matrix Manipulation)، توابع، روش‌های نمایش داده و الگوریتم‌های توسعه داده شده در متلب، برای پیاده‌سازی روش‌های هوشمند (مبتنی بر نمایش عددی و ماتریسی) دلخواه خود استفاده کنند. همچنین، متلب امکان تعامل برنامه‌نویسی مستقیم را با برنامه‌های نوشته شده به زبان‌های دیگر نظیر «سی» (C)، «سی پلاس پلاس» (++C)، «جاوا» (Java) و سایر موارد، برای توسعه‌دهندگان فراهم آورده است.

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

از الگوریتم‌های پردازش تصویر در متلب، می‌توان برای «بخش‌بندی تصاویر» (Image Segmentation)، بهبود تصاویر، «کاهش نویز» (Noise Reduction) در تصاویر، «تبدیلات هندسی» (Geometric Transformation)، «انطباق تصویر» (Image Registration) و انجام عملیات «پردازش تصویر 3-بعدی» (3D Image Processing) استفاده کرد.

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

یک تصویر دیجیتال در تولباکس پردازش تصویر در متلب، در قالب یک تابع دو بعدی به شکل $$F(x,y)$$ تعریف می‌شود. در این تابع، $$x$$ و $$y$$ مختصات مکانی هر نقطه را در تصویر نشان می‌دهند. همچنین، به دامنه مقداری تابع $$F$$، به ازاء هر جفت مختصات $$x$$ و $$y$$، «شدت» (Intensity) تصویر در آن نقطه گفته می‌شود. در صورتی که $$x$$ ،$$y$$ و دامنه مقداری تابع $$F$$، همگی مقادیر گسسته متناهی باشند، به تصویر مورد نظر، یک تصویر دیجیتال گفته می‌شود.

به فرایند «عددی‌سازی» (Digitising) مقادیر مختصات، «نمونه‌گیری» (Sampling) و به فرایند عددی‌سازی مقادیر شدت، «کوانتیزه‌سازی» (Quantization) گفته می‌شود. نتیجه حاصل از فرایندهای نمونه‌گیری و کوانتیزه‌سازی، تولید ماتریسی از مقادیر «حقیقی» (Real) است. یک تصویر دیجیتال، از طریق ماتریسی به شکل زیر قابل نمایش است:

پردازش تصویر در متلب (image Processing in Matlab)

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

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

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

پردازش تصویر در متلب (image Processing in Matlab)

تفاوت این نمایش با نمایش قبلی است که در متلب، «مبدأ» (Origin) از (0، 0) به (1، 1) «انتقال» (Shift) داده می‌شود.

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

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

1imread(‘filename’);

در این تابع، آرگومان (filename) رشته‌ای است که نام کامل تصویر و «فرمت» (Extension) آن را نمایش می‌دهد. به عنوان نمونه:

1F = imread(Penguins_grey.jpg);
2G = imread(Penguins_RGB.jpg);

شایان توجه است زمانی که آدرس فیزیکی محل ذخیره‌سازی تصویر، در آرگومان (filename) قید نشده باشد، تابع (imread) تصویر را از «دایرکتوری» (Directory) کنونی متلب خواهد خواند. در شرایطی که نیاز باشد تا تصویر از دایرکتوری دیگری در متلب خوانده شود، لازم است تا آدرس کامل تصویر در آرگومان (filename) مشخص شود.

در صورت قرار ندادن «نقطه ویرگول» (Semicolon) در انتهای دستورات متلب، نتایج ذخیره شده در یک متغیر یا خروجی حاصل از یک عملیات پردازشی در «پنجره دستورات» (Command Window) نمایش داده می‌شوند. در غیر این صورت، نتایج عملیات تنها در متغیرها ذخیره می‌شوند و خروجی‌‌ها در پنجره دستورات نمایش داده نخواهند شد. نماد (<<)، ابتدای یک خط دستوری را نمایش می‌دهد.

تصویر سطح خاکستری از پنگوئن‌ها
تصویر RGB از پنگوئن‌ها

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

1imread(Penguins_grey.jpg);

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

1G = imread(Penguins_RGB.jpg);

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

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

1[M,N] = size(f)

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

1whos G
نام متغیراندازهبایت‌هامشخصه‌های کلاسی
G768×1024×32359296uint8
1whos F
نام متغیراندازهبایت‌هامشخصه‌های کلاسی
F768×1024786432uint8

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

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

1imshow(Var_Name)

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

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

1imshow(Var_Name, [ ])

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

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

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

1B = imread(Penguins_grey.jpg);
2imtool(B)

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

پنجره‌ای که در هنگام استفاده از تابع imtool ظاهر می‌شود

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

از ابزار محاسبه فاصله در تابع imtool برای محاسبه فاصله میان منقارهای دو پنگوئن موجود در تصویر استفاده شده است.

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

نمایی از پیکسل‌های موجود در یک محدوده مربعی کوچک به همراه اطلاعات کانال‌های رنگ هر کدام از آن‌ها نشان داده شده است.

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

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

1A=imread(‘Penguins_grey.jpg’);
2B=imread(‘Penguins_RGB.jpg’);
3figure
4subplot(1,2,1),imshow(A)
5subplot(1,2,2),imshow(B)
تصاویر RGB و سطح خاکستری در کنار یکدیگر

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

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

1imwrite(Var_Name, ‘filename’);

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

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

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

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

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

1F = imread(‘Penguins_grey.jpg’);
2imwrite(F,’Penguins_grey_75.
3jpg’,’quality’,75);
4imwrite(F,’Penguins_grey_10.
5jpg’,’quality’,10);
6imwrite(F,’Penguins_grey_90.
7jpg’,’quality’,90);
تصویر با پارامتر کیفیت 75
تصویر با پارامتر کیفیت 90
تصویر با پارامتر کیفیت 10

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

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

1K = 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) نیز گفته می‌شود، از 8 بیت برای نمایش مقدار شدت رنگ هر پیکسل استفاده می‌شود؛ پیکسل با مقدار شدت برابر با صفر، رنگ سیاه را نمایش می‌دهد.

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

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

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

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

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

تصاویر RGB

در تصاویر RGB، هر پیکسل رنگی توسط یک سه‌تایی مشخص کننده مؤلفه‌های قرمز (R)، سبز (G) و آبی (B) آن پیکسل، نمایش داده می‌شود. در تولباکس پردازش تصویر در متلب و توابع آن، هر تصویر رنگی RGB متناظر با یک آرایه سه‌بعدی به ابعاد MxNx3 است.

در اینجا، M بیانگر ارتفاع و N، نشان دهنده پهنای تصویر است. همچنین، عدد 3 بیانگر تعداد مؤلفه‌های رنگی تصویر RGB است. در تصاویر RGB از نوع double، محدوده مقادیر شدت پیکسل‌ها، بازه [0 و 1] است. در تصویر RGB از نوع Unit8 و Unit16، محدوده مقادیر به ترتیب برابر با بازه [0 و 255] و [0 و 65535] است.

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

کیفیت تصویر

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

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

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

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

1imresize(x,1/2)

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

1imresize(x,2)

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

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

همچنین، خط دستوری زیر، قدرت تفکیک یا دقت پیکسلی تصویر را به اندازه یک چهارم ($$\frac { 1 } { 4 }$$) تغییر می‌دهد.

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

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

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

1A = imread(‘Penguins_grey.jpg’);
2A1 = imresize((imresize(A,1/2)),2);
3imshow(A1)
تصویری که نصف قدرت تفکیک یا دقت پیکسلی تصویر اصلی را دارد ولی اندازه آن با تصویر اصلی برابر است.
1A = imread(‘Penguins_grey.jpg’);
2A2 = imresize((imresize(A,1/4)),4);
3imshow(A2)
تصویر با (1/4) قدرت تفکیک یا دقت پیکسلی تصویر اصلی
1A = imread(‘Penguins_grey.jpg’);
2A3 = imresize((imresize(A,1/8)),8);
3imshow(A3)
تصویر با (1/8) قدرت تفکیک یا دقت پیکسلی تصویر اصلی

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

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

برای «بازکوانتیزه‌سازی» (Requantization) تصویر در متلب، می‌توان از تابع (grayslice) در تولباکس پردازش تصویر در متلب استفاده کرد. با استفاده از مجموعه دستورات زیر، سطوح کوانتیزه‌سازی تصویر (Penguins_grey.jpg) به 64 کاهش پیدا می‌کند و تصویر حاصل در خروجی نمایش داده می‌شود.

1A = imread(‘Penguins_grey.jpg’);
2B=grayslice(A,64);
3imshow(B,gray(64))
کاهش سطوح کوانتیزه‌سازی تصویر به 64

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

1A = imread(‘Penguins_grey.jpg’);
2B=grayslice(A,8);
3imshow(B,gray(8))
کاهش سطوح کوانتیزه‌سازی تصویر به 8

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

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

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

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

1A = imread(‘Penguins_grey.
2jpg’);
3figure(1), imhist(A);
تولید هیستوگرام تصویر پنگوئن‌ها با استفاده از تابع (imhist)

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

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

  • روش Histogram Stretching
  • روش Histogram Shrinking
  • روش Histogram Sliding

روش Histogram Stretching

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

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

نحوه کشش یا Stretch بخش‌هایی از هیستوگرام توسط تابع (imadjust)
1imadjust (Var_Name, [a,b], [c,d])

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

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

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

1A = imread(‘Penguins_grey.jpg’);
2HE = histeq(A);
3imshow(HE),figure, imhist(HE)

کشش یا Stretch بخش‌هایی از هیستوگرام تصویر پنگوئن‌ها توسط تابع (imadjust)

روش Histogram Shrinking

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

روش Histogram Sliding

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

1A = imread(‘Penguins_grey.jpg’);
2imshow(A),title(‘Original Image’);
3B=im2double(A);
4bright_add = 0.2;
5imhist(A), title(‘Original Histogram’);
6C=B+bright_add;
7imshow(C),title(‘New Bright Image’);
8imhist(C), title(‘New Histogram’);

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

تصویر اصلی
هیستوگرام تصویر اصلی
تصویر تغییر یافته
هیستوگرام تصویر تغییر یافته

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

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

روش‌های آستانه‌گذاری، به دو دسته روش‌های «تک آستانه‌گذاری» (Single Thresholding) و «آستانه‌گذاری دوگانه» (Double Thresholding) تقسیم‌بندی می‌شوند. روش‌های تک آستانه‌گذاری و آستانه‌گذاری دوگانه، در تولباکس پردازش تصویر در متلب پیاده‌سازی شده‌اند.

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

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

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

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

1G=F>100

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

1A = imread(‘Penguins_grey.jpg’);
2imshow(A),figure, imshow(A>70)
تصویر اصلی
تصویر حاصل پس از آستانه‌گذاری

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

1im2bw(image,level)

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

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

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

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

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

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

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

1B = imsharpen(A)

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

1a=imread(‘Image_sharpen.jpg’);
2imshow(a)
3=imsharpen(a);
4figure,imshow(b)
تصویری که قرار است Sharp شود
تصویر حاصل از عملیات Image sharpening

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

1b=imsharpen(a,’Radius’,
24,’Amount’,2);
3figure,imshow(b)
تصویر حاصل از عملیات Image sharpening و مشخص کردن مقادیر مناسب برای پارامترهای Radius و Amount

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

جمع‌بندی

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

بر اساس رای ۶۵ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
Electronics For YouElectronics For You
۲۴ دیدگاه برای «پردازش تصویر در متلب — راهنمای جامع»

سلام خسته نباشید
کد نویسی های مورد نیاز برای مواردی که گفتید مثل
دقیق کردن و نمایان‌سازی تصاویر (Image Sharpening)
«حذف کردن نویز» (Noise Removal)
تصحیح لکه‌ها و تار شدگی‌های موجود در تصویر (Deblurring)
«استخراج لبه‌ها» (Edge Extraction)
باینری کردن تصاویر (Binarization)
بهبود کنتراست تصاویر دیجیتالی (Contrast Enhancement)
بخش‌بندی تصاویر و برچسب‌گذاری اشیاء موجود در آن‌ها (Object Segmentation and Labeling)
در سایتتون هست؟


با سلام و احترام؛

صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاس‌گزاریم.

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

  • آموزش پردازش تصویر در متلب
  • آموزش کتابخانه Pillow برای پردازش تصویر در پایتون – مقدماتی
  • آموزش پردازش سیگنال های واقعی در متلب
  • مطالب مرتبط در مجله فرادرس هم در ادامه آمده است:

  • پردازش تصویر با پایتون — راهنمای کاربردی
  • قطعه بندی تصویر در پایتون — راهنمای کاربردی
  • تبدیل هاف (Hough Transform) در پردازش تصویر — از صفر تا صد
  • تشخیص لبه در پایتون — به زبان ساده
  • تشخیص اشیا در تصاویر با پایتون — به زبان ساده
  • بینایی کامپیوتر چیست؟ — به زبان ساده
  • پیاده سازی مدل‌ دسته بندی تصاویر در پایتون — راهنمای کاربردی
  • علاوه بر موارد فوق می‌توانید با جستجوی موضوع مورد نظر خود در سایت فرادرس و همچنین مجله فرادرس آموزش‌ها و مطالب مرتبط بیشتری را پیدا کنید.

    برای شما آرزوی سلامتی و موفقیت داریم.

    باسلام تشکر از مطالب بسیار مفید
    من میخام یک فاصله سنج لیزری بسازم ک توسط دوربین پردازش بشه
    میخام فاصله دقیق و در حد صدم میلیمتر هم داشته باشم میخام فاصله دوتا جسم ثابت ک در ظاهر هردو نسبت به لیزر فاصله مساوی ایی دارن تشخیص داده بشه و اختلاف بسیار جزییشونو پیدا کنم
    آیا با پردازش تصویر و پیکسلهایی ک گفتید امکانش هست؟؟؟در حد صدم یا دهم میلیمتر اختلاف هم برام مهمه…ممنون میشم اگه کسی مطلبی یا پاسخی داره بدونم…خیلی ممنون از سایت خوبتون؟؟؟امکان همکاری در یک پروژه مهم هم مقدور میباشد…با تشکر

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

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

    سلام وقت شما بخیر
    من می‌خوام رزولوشن یک تصویر رو تغییر بدم به دلخواه مثلا ۱۲۸در ۱۲۸ بشه رزولوشن ولی ابعاد تصویر تغییر نکنه
    چجوری باید از کد resize استفاده کنم؟

    سلام. خسته نباشید،خیلی خوب و سریع،بدون حواشی توضیح داده بودید ،ممنون.
    من یک سوال داشتم،اکر تعداد پیکسلهای با یک فرکانس خاص را در یک عکس بخوام چه دستوری هست؟

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

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

    با سلام؛

    از همراهی شما با مجله فرادرس سپاس‌گزاریم. در متلب برای خواندن داده‌ها از فایل‌ها و به آن‌ها، از توابع import (وارد کردن) و export (صادر کردن) استفاده می‌شود. اما معمولا هنگامی که کاربر با کلان داده (Big Data) مواجه است یا مجموعه داده‌ای حاوی فایل‌های زیاد و حجیم دارد، معمولا از روش‌های وارد کردن تدریجی داده‌ها استفاده می‌شود. یکی از این روش‌ها، استفاده از Datastore است. شما می‌تواند با ساخت Datastoreها در هر مرحله از زمان به بخش کوچکی از داده‌ها دسترسی داشته باشید. راهکارهای دیگری نیز برای این موضوع (مانند Memory Mapping و MAT-files) وجود دارند که متناسب با شرایط مجموعه داده خود و آشنایی با قابلیت‌های متلب، می‌توانید از آن‌ها استفاده کنید. مطالعه مطالب زیر نیز در این راستا به شما پیشنهاد می‌شود.

    تقلب نامه (Cheat Sheet) توابع و دستورات متلب (MATLAB)

    تقلب نامه (Cheat Sheet) یادگیری ماشین در متلب — راهنمای کاربردی

    پیاده‌سازی سیستم تشخیص چهره در متلب — راهنمای کاربردی

    پیروز، شاد و تندرست باشید.

    با عرض سلام و خداقوت خدمت اساتید گرامی،چطور میتوان هیستوگرام یک تصویر خاکستری و یا تصاویر دیگر رو با هیستوگرام یک تصویر دیگه تطبیق (image maching) کرد بطوری که هردو یک هیستوگرام رو داشته باشند.کدی که این عمل رو انجام میده رو کجا میتونم دریافت کنم.
    باتشکر.

    سلام
    میخوام در چندین تصویر نقاط زیر را انتخاب کنم:
    (x1,y1)
    (x2,y2)
    (x3,y3)
    .
    .
    .
    (xn,yn)
    این نقاط ،نقاطی هستن که در نرم افزار paint شروع به رسم کادری میکنند قسمت پایین و راست تصویر رانتخاب میکند،به طوری که نقطه ی شروع سطربالا باید از سطر پایین ار خود بزرگتر باشد به گونه ای که هرنقطه که درکادر تصویر بعدی قرار میگیرداز محدوده ی کادر قبلی خارج نشود،سایز تصاویر باهم برابر نیستن آیا کسی راه حلی برای این مساله دارد؟
    چه رابطه بین اندازه های مختلف و نقطه انتخاب شده باشد تا این اتفاق بیافتد(نقاط شروع اولی عقب از دومی و همچنین رومی نسبت به سومی )
    ممنون میشم منو راهنمایی کنید
    ازبازدیدکنندگان محترم نیز ممنون میشم اگه اطلاعاتی در این زمینه دارند

    سلام یه سوال داشتم
    علت این که دو تا تصویر باهم متفاوت هستند ولی هیستوگرام یکسانی دارند علت در چیست؟

    با سلام؛

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

    شاد، پیروز و تندرست باشید.

    سلام.
    چگونه میشه تصویری که به صورت ترمال هست یعنی یک تصویر حرارتی هست که شامل طیف های رنگی هست را به تصویر اصلی و قابل مشاهده تبدیل کرد.ممنون میشم اگه جواب بدید.

    واقعا عالی بود، بهترین متنی بود که در این زمینه خواندم. ای کاش ویدئوی آموزشی هم برای این درس تهیه کنید، چون به نظر عالی است.

    با سلام؛

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

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

    با احترام؛
    پیروز، شاد و تندرست باشید.

    سلام ممنون از مطالبتون بخشید برای مقاله میشه از این متن استفاده کرد برای پروژه دانشگاهی

    سلام، وقت شما بخیر؛

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

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

    با سلام
    اگر دو تصویر رنگی را از هم تفریق کنیم و سپس بخواهیم به حالت اصلی برگردیم باید چه کار کنیم؟
    چون در حالت عادی اعدادی که از imsubtract استفاده میکنیم و دوباره جواب بدست آماده را با تصویر کم شده imadd میکنیم دیگر جواب بدست آمده مثل تصویر اصل نمی باشد و دارای نقاطی بسیار روشن یا بسیار تاریک خواهد بود. به عبارتی اعدادی که حاصل تفریق آن کمتر از 0 بوده است را 0 در نظر گرفته است و اعداد بیشتر از 255 را نیز همان 255 در نظر گرفته است و لذا نمیتوانیم به اصل تصویر بازگردیم.
    ضمنا این کار را هم با اعداد double امتحان کرده ام و هم با uint8 ولی فایده ای نداشت.
    ممنون میشم راهنمایی ام کنید

    با عرض سلام و تشکر بابت مطالب خوبی که منتشر کردید.
    من سوالی دارم، اینکه پردازش ها در متلب چند بیتی اجرا میشوند؟
    آیا 32 یا 64 بیتی هستند یا بسته به نوع تصویر تعداد بیت پردازش ها هم تغییر میکند؟

    با سلام؛

    از همراهی شما با مجله فرادرس سپاس‌گزاریم. از ارائه بازخورد و پیام محبت‌آمیز شما نیز قدردانیم. در پاسخ به این پرسش که آیا لزومی به استفاده از نسخه خاصی از مطلب (۶۴ بیت یا ۳۲ بیت) در پروزه‌های پردازش تصویر با توحه به عمق بیت تصویر وجود دارد یا خیر، باید گفت: «به طور کلی و در حالت عادی، خیر». در مقالات و پروژه های پردازش تصویری که با متلب انجام می‌شوند، نسخه‌ای از متلب که استفاده شده است مشخص می‌شود و دلیل این امر تاثیر نسخه‌های ۶۴ و ۳۲ بیتی در سرعت و زمان اجرای پردازش‌ها و برخی دیگر از محاسبات سطح پایین است. هر چند به طور کلی در رایانه‌های جدید به نظر می‌رسد استفاده از نسخه‌های ۶۴ بیت گزینه مناسب‌تری باشد.

    ۲. آیا بسته به عمیق بیت تصویر، نیاز به استفاده از پردازش خاصی

    سلام
    عالی بود.
    دستتون درد نکنه!

    نظر شما چیست؟

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