در این مقاله، در رابطه با مبانی و همچنین مباحث پیشرفته پردازش تصویر با استفاده از نرم افزار MATLAB، صحبت شده است. این مقالات توابع اساسی و پیشرفته جعبه ابزار پردازش تصویر MATLAB (IPT) و اثرات آنها بر روی تصاویر مختلف را پوشش می دهند. قسمت اول این مقالات، مقدمه ای کوتاه در رابطه با تصاویر دیجیتال و MATLAB و به دنبال آن، عملیات پردازش تصویر اساسی در MATLAB، از جمله خواندن تصویر، نمایش تصاویر و ذخیره سازی دوباره آنها در دیسک را، بیان می کند.
پردازش تصویر
پردازش تصویر، تکنیک تبدیل یک تصویر، به فرمت دیجیتال و انجام عملیات بر روی آن، برای دریافت یک تصویر پیشرفته، و یا استخراج برخی از اطلاعات مفید از آن است. تغییراتی که در تصاویر صورت می گیرد، معمولاً به صورت خودکار و با تکیه بر الگوریتم های با دقت طراحی شده، انجام می شود.
پردازش تصویر یک زمینه چند رشته ای است، که ازکمک شاخه های مختلف علم از جمله ریاضیات، فیزیک، نور شناختی و مهندسی برق، استفاده می کند. پردازش تصویر همچنین با حوزه های دیگری مانند تشخیص الگو، یادگیری ماشین، هوش مصنوعی و تحقیقات بینایی انسان نیز، همپوشانی دارد. در این مطلب، مراحل مختلف درگیر در پردازش تصویر، شامل وارد کردن تصویر از طریق اسکنر نوری یا دوربین دیجیتال، تجزیه و تحلیل و کار روی تصویر (فشرده سازی داده ها، افزایش تصویر و فیلترینگ)، و تولید تصویر خروجی مورد نظر است.
نیاز به استخراج اطلاعات از تصاویر و تفسیر محتوای آنها، عاملی موثر در توسعه پردازش تصویر بوده است. پردازش تصویر باید در بخش های متعددی، از جمله پزشکی، صنعت، نظامی، لوازم الکترونیکی مصرف کننده و مواردی از این قبیل مورد استفاده قرار گیرد.
در پزشکی از آن برای روش های تصویربرداری تشخیصی، مانند رادیوگرافی دیجیتال، توموگرافی انتشار پوزیترون (PET)، توموگرافی محوری کامپیوتری (CAT)، تصویربرداری رزوننس مغناطیسی (MRI) و تصویربرداری رزونانس مغناطیسی عملکردی (fMRI)، استفاده می شود. کاربردهای صنعتی پردازش تصویر شامل سیستم های تولیدی مانند سیستم های ایمنی، کنترل کیفیت و کنترل خودکار هدایت شونده خودرو می باشد.
الگوریتم های پیچیده پردازش تصویر، می توانند در برنامه هایی برای تشخیص سربازان یا خودروها، تا هدایت موشکی و تشخیص شیء و شناسایی، مورد استفاده قرار گیرند. تکنیک های بیومتریک از جمله انگشت نگاری، چهره نگاری، بررسی عنبیه و تشخیص دست، به طور گسترده ای در اجرای قانون و امنیت مورد استفاده قرار می گیرند.
دوربین های دیجیتال و دوربین های فیلمبرداری، تلویزیون های با کیفیت بالا، مانیتورها، پخش کننده های دی وی دی، ضبط کننده های ویدئویی شخصی و تلفن های همراه جزء موارد محبوب لوازم الکترونیکی هایی هستند که، از پردازش تصویر استفاده می کنند.
نرم افزار متلب MATLAB
واژه MATLAB که مخفف matrix laboratory به معنای آزمایشگاه ماتریس است، بستری برای حل مسائل ریاضی و علمی است. متلب یک زبان برنامه نویسی اختصاصی است که توسط MathWorks توسعه یافته است و اجازه کار بر روی ماتریس، توابع و رسم داده ها، پیاده سازی الگوریتم، ایجاد رابط کاربری و ارتباط با برنامه های نوشته شده در دیگر زبان های برنامه نویسی مانند C، C++، جاوا و ... را به کاربر می دهد.
MATLAB، IPT مجموعه ای از توابع است که قابلیت های محیط محاسبات عددی نرم افزار متلب را، گسترش می دهد. IPT مجموعه جامعی از الگوریتم های مرجع استاندارد و برنامه های کاربردی گردش کار را، برای پردازش تصویر، تجزیه و تحلیل، تجسم و توسعه الگوریتم ها ارائه می کند.
از این مجموعه توابع می توان برای اجرای تقطیع تصویر، افزایش کیفیت تصویر، کاهش نویز، تغییر های هندسی، ثبت تصویر و عملیات پردازش تصویر سه بعدی، استفاده کرد. بسیاری از توابع IPT از گسترش کد C/C++ برای نمونه سازی دستکتاپ و گسترش ادغام سیستم بینایی، پشتیبانی می کنند.
تصویر دیجیتالی چیست؟
یک تصویر دیجیتال ممکن است به صورت یک تابع دو بعدی f(x,y) تعریف شود، جایی که x و y مختصات فضایی هستند و دامنه f در هر جفت مختصات، شدت تصویر در آن نقطه نامیده می شود. هنگامی که ،x y و مقادیر دامنه f همگی کمیت های گسسته محدود باشند، تصویر به عنوان یک تصویر دیجیتالی شناخته می شود.
دیجیتالی کردن مقادیر مختصات به عنوان نمونه برداری (sampling ) نامیده می شود، در حالی که دیجیتالی کردن مقادیر دامنه کوانتیزه کردن (quantisation ) نامیده می شود. حاصل نمونه برداری و کوانتیزه کردن، ماتریسی از اعداد واقعی است.
یک تصویر دیجیتالی شده به عنوان مثال نشان داده شده است:
هر بخش از آرایه، یک پیکسل یا یک بخش از تصویر را نشان می دهد.
دستورات پایه پردازش تصویر در MATLAB
در نرم افزار MATLAB یک تصویر دیجیتال، به صورت زیر نشان داده می شود:
در این مثال شما می توانید تغییر در نقطه شروع را ببینید.
خواندن تصاویر
تصاویر در محیط MATLAB با استفاده از تابع imread خوانده می شوند. دستور imread عبارت است از:
imread(filename);
که به جای filename، نام کامل تصویر همراه با پسوند آن نوشته می شود.
به عنوان مثال:
>>F = imread(Penguins_grey.jpg);
>>G = imread(Penguins_RGB.jpg);
لطفا توجه داشته باشید که اگر هیچ اطلاعاتی در رابطه با مسیر عکس در filename گنجانده نشده باشد، فرمان imread فایل را از پوشه ی فعلی می خواند. بنابراین، هنگامی که یک تصویر از یک پوشه ی دیگری باید خوانده شود، مسیر تصویر باید در filename مشخص شود.
نقطه ویرگول (;) در پایان یک جمله برای متوقف کردن خروجی استفاده می شود. اگر از نقطه ویرگول در انتهای جمله استفاده نشود، MATLAB نتیجه عملیات بیان شده در آن خط را، بر روی صفحه نمایش می دهد.
>>، نشان دهنده آغاز یک خط فرمان است و عنوان آن در پنجره فرمان MATLAB ظاهر می شود.
شکل های ۱ و ۲ به ترتیب تصاویر سیاه و سفید و رنگی از پنگوئن ها را نشان می دهند. این تصاویر را می توان از وب سایت EFY دانلود کرد و در پوشه ی کار فعلی ذخیره کرد. توابع imread، imshow و imwrite در متلب به ترتیب برای خواندن تصاویر در محیط متلب، نمایش آنها در دسکتاپ متلب و ذخیره آنها در پوشه فعلی استفاده می شوند.
در رابطه با تصاویر خاکستری، ماتریس حاصل از دستور imread شامل ۲۵۶×۲۵۶ یا ۶۵٬۵۳۶ عضو است. دستور اول مقادیر خاکستری تمام پیکسل ها را در یک تصویر سیاه و سفید می گیرد و آن ها را در یک ماتریس F(۲۵۶×۲۵۶ عنصر) قرار می دهد که هم اکنون یک متغیر MATLAB است و عملیات های ماتریسی گوناگونی بر روی آن، قابل اجرا است.
در رابطه با تصاویر رنگی، مقادیر پیکسل شامل یک لیست سه مقداری است، این لیست شامل اجزای قرمز، سبز و آبی از رنگ پیکسل داده شده است و ماتریس G که یک ماتریس سه بعدی ۲۵۶x۲۵۶x۳ است را، تشکیل می دهد. اگر نقطه ویرگول در انتهای جمله، وجود نداشته باشد، نتیجه فرمان بر روی صفحه نمایش داده می شود.
به طور خلاصه، تابع imread مقادیر پیکسل را از یک فایل تصویر می خواند و ماتریسی از تمامی مقادیر پیکسل ها را بر می گرداند. برای بدست آوردن اندازه یک تصویر دو بعدی می توانید فرمان زیر را بنویسید:
[M,N] = size(f)
در این فرمان تعداد ردیف ها (M) و ستون ها (N) را در تصویر بر می گرداند. شما می توانید اطلاعات بیشتری در مورد آرایه با استفاده از دستور whos، به دست بیاورید. دستور whos نام، اندازه، بایت ها، کلاس و ویژگی های آرایه f را به ما می دهد. به عنوان مثال، whos در رابطه با F اطلاعات زیر را به ما می دهد:
Class Attributes | Bytes | Size | Name |
uint8 | 2359296 | 768×1024×3 | F |
Whos در رابطه با G می دهد:
Class Attributes | Bytes | Size | Name |
uint8 | 786432 | 768×1024 | G |
پیشنهاد میکنم مقاله "20 ایده برتر برای پروژه متلب" مطالعه کنید.
نمایش تصویر
تصاویر بر روی دسکتاپ MATLAB با استفاده از فرمان imshow، که به صورت زیر نوشته می شود نمایش داده می شوند:
imshow(f)
که در آن f آرایه تصویر از نوع داده های uint8 یا double است. داده های نوع uint8 مقادیر را بین اعداد ۰ تا ۲۵۵ محدود می کند.
باید به خاطر داشت که برای ماتریسی از نوع double، تابع imshow انتظار دارد که مقادیر بین ۰ تا ۱ باشند، جایی که ۰ به صورت سیاه و ۱ به صورت سفید نمایش داده می شود. هر مقداری بین ۰ تا ۱ به صورت خاکستری نمایش داده می شود. هر مقدار بزرگتر از ۱ به صورت سفید نمایش داده می شود، و مقداری کمتر از صفر به صورت سیاه نمایش داده می شود. برای بدست آوردن مقادیر درون این محدوده، می توان از یک عامل factor استفاده کرد. هر چه عامل factor بزرگتر باشد، تصویر تیره تر خواهد بود.
به عنوان مثال، اگر دستور imshow(G) را به نرم افزار متلب بدهید، شکل 3 بر روی دسکتاپ نشان داده می شود. imshow(F) شکل 4 را بر روی دستکتاپ نمایش می دهد. دستور imshow(f, [low high]) همه مقادیر کمتر یا برابر با low را سیاه نشان می دهد و همه مقادیر برابر یا بیشتر از high را به صورت سفید نمایش می دهد. مقادیر در میان نیز، به عنوان مقادیر شدت متوسط نمایش داده می شوند.
دستور imshow(f, [ ]) مجموعه متغیرهای پایین را در حداقل مقدار آرایه f و مجموعه متغیرهای بالا را در حداکثر مقدار آرایه f قرار می دهد. این تابع در بهبود کنتراست تصاویری که محدوده پویای کمی دارند کمک می کند.
ابزار تصویر در جعبه ابزار پردازش تصویر، محیط تعاملی تری را برای مشاهده و پیمایش درون تصاویر، نمایش اطلاعات دقیق در مورد مقادیر پیکسل، اندازه گیری فاصله ها و دیگر عملیات مفید، فراهم می کند. برای شروع استفاده از ابزار تصویر از تابع imtool، استفاده کنید. فرمان های زیر تصویر ذخیره شده بر روی دسکتاپ با نام Penguins_grey.jpg را می خوانند و سپس آن را با استفاده از فرمان imtool نمایش می دهند:
>B = imread(Penguins_grey.jpg);
>>imtool(B)شکل ۵ پنجره ای را نشان می دهد که هنگام استفاده از ابزار تصویر ظاهر می شود. متن وضعیت در پایین پنجره اصلی، محل ستون/ردیف و مقدار پیکسلی که در زیر مکان نشان ماوس قرار دارد را نشان می دهد.
پیشنهاد میکنم مقاله "معرفی بهترین کتاب های آموزش متلب" مطالعه کنید.
ابزار Measure Distance زیر مجموعه Tools برای نشان دادن فاصله بین دو نقطه انتخاب شده استفاده می شود. شکل ۶ استفاده از این ابزار را برای اندازه گیری فاصله بین منقار پنگوئن های مختلف نشان می دهد.
ابزار Overview tool در زیر مجموعه Tools کل تصویر را در یک نمای بندانگشتی نشان می دهد. ابزار Pixel Region، پیکسل های اختصاصی را در بخش مربع های کوچک در صفحه ی بالا، سمت راست نشان می دهد. این تصویر به اندازه کافی زوم شده است تا، مقادیر واقعی پیکسل قابل مشاهده باشد. شکل 7 این لحظه را نمایش می دهد.
چند تصویر را می توان در درون یک شکل با استفاده از تابع subplot نمایش داد. این تابع دارای سه پارامتر درون پرانتز است، دو پارامتر اول تعداد ردیف ها و ستون ها را برای تقسیم شکل مشخص می کنند. پارامتر سوم مشخص می کند که از کدام زیرمجموعه برای تصاویر استفاده کند. به عنوان مثال عبارت (۳٬۲٬۳) به 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)شکلی که پس از دستور سوم بر روی صفحه نمایش ظاهر می شود در شکل ۸ نشان داده شده است.
نوشتن تصویر
تصاویر با استفاده از تابع 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(f, 'filename.jpg', 'quality', q)
که در آن q یک عدد صحیح بین ۰ تا ۱۰۰ است.
می توان از این فرمان برای کاهش اندازه تصویر استفاده کرد. پارامتر کیفیت به عنوان یک رابطه جایگزینی بین کیفیت معقول تصویر حاصل و اندازه فایل، استفاده می شود.
شما هم اکنون می توانید تصویر Penguins_grey.jpg که در پوشه کار فعلی ذخیره شده است را بخوانید و آن را با فرمت JPG با سه پارامتر کیفیت مختلف ذخیره کنید: 75 (پیش فرض)، 10 (کیفیت ضعیف و اندازه کوچک) و 90 (با کیفیت بالا و اندازه بزرگ):F = imread(‘Penguins_grey.jpg’);
imwrite(F,’Penguins_grey_75.
jpg’,’quality’,75);
imwrite(F,’Penguins_grey_10.
jpg’,’quality’,10);
imwrite(F,’Penguins_grey_90.
jpg’,’quality’,90);شکل 9 تا 11 تصاویر را برای پارامترهای کیفیت 75، 10 و 90 به ترتیب نشان می دهد. توجه داشته باشید که یک تصویر با کیفیت پایین، اندازه کوچکتری نسبت به یک تصویر، با کیفیت بالاتر دارد.
فرمان imwrite برای اجرا بر روی تصاویر TIFF دارای فرمت:
imwrite (g, ‘filename.tif’, ‘compression’,
‘parameter’, ……’resolution’,
[colresrowres])
اطلاعات تصویر
جزئیات فایل شامل نام فایل، داده ها، اندازه، فرمت، ارتفاع و عرض را می توان با استفاده از این فرمان به دست آورد:
imfinfo’filename’
به عنوان مثال، دستور imfinfo('Penguins_grey.jpg') اطلاعات زیر را به ما می دهد:
ans=
Filename: [1×50 char]
FileModDate: ’02-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 را می توان به عنوان یک متغیر ساختاری شناخت که می توانند برای محاسبات بعدی مورد استفاده قرار گیرند.
مثال زیر تمام اطلاعات را در متغیر K ذخیره می کند:
K = imfinfo('Penguins_grey.jpg')
اطلاعات تولید شده توسط imfinfo با استفاده از پوشه ها به ساختارهای متغیر متصل می شود که این ساختارها، توسط یک نقطه از K جدا می شوند. به عنوان مثال، ارتفاع و عرض تصویر در ساختار K.height و K.weight ذخیره می شوند.
پردازش تصویر طیف گسترده و متنوعی از تکنیک ها و الگوریتم ها را پوشش می دهد که، فرآیندهای اساسی زیربنای این تکنیک ها عبارتند از: تیز کردن، حذف نویز، رفع تاری، استخراج لبه، دوتایی شدن، افزایش کنتراست، و تقسیم بندی و برچسب گذاری اشیا.
افزایش تیز کردن لبه ها، جزئیات ریز یک تصویر را برای مشاهده توسط انسان، به نمایش در می آورد. تیز کردن لبه ها، تضاد بین مناطق روشن و تاریک را افزایش می دهد تا ویژگی های تصویر را بیرون بیاورد. به صورت کلی تیز کردن شامل اعمال یک فیلتر بالاگذر، بر روی یک تصویر است.
تکنیک های حذف نویز، مقدار نویز موجود در یک تصویر را قبل از پردازش بیشتر، کاهش می دهد. حذف یا کاهش نویز، در پردازش تصویر و تفسیر تصویر برای به دست آوردن اطلاعات مفید، امری ضروری است. تصاویر گرفته شده از هر دو دوربین دیجیتال و همچنین دوربین های فیلم معمولی، نویز را از منابع مختلف دریافت می کنند. این منابع نویز شامل نویز نمک و فلفل ( اختلال کاهش نور و تاریکی ) و نویز گاوسی ( مقدار هر پیکسل در تصویر به مقدار کمی تغییر می کند ) است. در هر دو صورت نویز در پیکسل های مختلف می تواند مرتبط یا نا مرتبط باشد. در بسیاری از موارد، مقادیر نویز در پیکسل های مختلف به صورت مستقل و به طور یکسان توزیع شده و در نتیجه، به صورت نامرتبط مدل می شوند. در انتخاب الگوریتم کاهش نویز، باید توان رایانه ی موجود و زمان را در نظر گرفت. هم چنین باید پاسخ به این سوال که، آیا از بین رفتن برخی از جزئیات تصویر در صورتی که منجر به حذف نویز بیشتر و یا مواردی مانند آن شود، قابل قبول است یا خیر را نیز، در نظر داشت.
Deblurring یا رفع تاری، فرایندی برای از بین بردن مصنوعات تار کننده ( مانند تاری ناشی از انحراف فوکوس یا تاری حرکت ) از تصاویر است. تاری معمولاً به عنوان یک تابع گسترش نقطه پیچشی با یک تصویر تیز ورودی فرضی، مدلسازی میشود، جایی که هم تصویر تیز ورودی (که باید بازیابی شود) و هم تابع توزیع نقطه، ناشناخته هستند. الگوریتمهای رفع تاری شامل روشهایی برای حذف تاری از یک تصویر هستند. رفع تاری یک فرآیند تکراری است و ممکن است لازم باشد تا این فرآیند را چندین بار تکرار کنید، تا زمانی که تصویر نهایی به بهترین تقریب از تصویر اصلی برسد.
استخراج لبه یا تشخیص لبه، برای جدا کردن اشیا از یکدیگر، قبل از شناسایی محتوای آنها، استفاده می شود. این شیوه، شامل انواع روش های ریاضی است که هدف آنها شناسایی نقاطی در یک تصویر دیجیتال است که روشنایی در آن ها، به شدت تغییر می کند.
رویکردهای تشخیص لبه را می توان در دو دسته ی رویکرد مبتنی بر جستجو و رویکرد مبتنی بر تقاطع صفر، دسته بندی کرد. روشهای مبتنی بر جستجو، لبهها را، ابتدا با محاسبه یک اندازهگیری از استحکام لبه، (معمولاً یک تابع مشتق مرتبه اول) مانند بزرگی گرادیان و سپس جستجو برای جهت محل حداکثر بزرگی گرادیان، با استفاده از تخمین محاسبهشده جهتگیری محلی لبه، معمولا جهت گرادیان، شناسایی میکنند. روش های تقاطع صفر، به دنبال تقاطع های صفر در یک تابع مشتق مرتبه دوم محاسبه شده از تصویر، برای یافتن لبه می گردند. ردیاب های لبه درجه یک شامل آشکارساز لبه Canny، اپراتورهای Prewitt، Sobel و غیره هستند.
روشهای دیگری که در این زمینه مورد استفاده قرار می گیرند شامل رویکرد دیفرانسیل مرتبه دوم برای تشخیص تقاطع های صفر، روشهای همخوانی فاز (یا انسجام فاز) یا تبدیل کشش فاز (PST) می شوند. رویکرد دیفرانسیل مرتبه دوم، تقاطع های صفر مشتق جهتی مرتبه دوم را در جهت گرادیان تشخیص می دهد. روشهای همخوانی فاز سعی میکنند مکانهایی را در یک تصویر پیدا کنند که، در آن تمام سینوسیها ی دامنه فرکانس، در فاز هستند. PST تصویر را با شبیه سازی انتشار از طریق یک محیط انکسار با خاصیت پراکندگی سه بعدی مهندسی شده، (ضریب شکست) تغییر می دهد.
Binarisation یا دو تایی شدن به کاهش یک تصویر سیاه و سفید، به دو سطح موجود در خاکستری، یعنی سیاه و سفید اشاره دارد. Thresholding یا آستامه گذاری، یک تکنیک محبوب برای تبدیل هر تصویر در مقیاس سیاه و سفید به یک تصویر باینری است.
افزایش کنتراست برای بهبود تصویر برای مشاهده انسان و همچنین برای انجام وظایف پردازش تصویر انجام می شود. افزایش کنتراست با استفاده بهینه از رنگهای موجود در نمایشگر یا دستگاه خروجی، ویژگیهای تصویر را واضحتر نشان میدهد. دستکاری کنتراست شامل تغییر محدوده مقادیر کنتراست، در یک تصویر است.
تقسیم بندی و برچسب گذاری اشیاء در یک صحنه، پیش نیاز اکثر سیستم های تشخیص و طبقه بندی اشیا است. تقسیم بندی فرآیند اختصاص دادن هر پیکسل در تصویر منبع به دو یا چند کلاس است. تقسیمبندی تصویر، فرآیند تقسیمبندی تصویر دیجیتال، به بخشهای متعدد (مجموعهای از پیکسلها که به عنوان سوپر پیکسل نیز شناخته میشوند) می باشد. هدف ساده کردن و ( یا ) تغییر نمایش کنتراست یک تصویر به چیزی است که معنیدارتر بوده و تحلیل آن، آسان تر باشد. هنگامی که اشیاء مربوطه تقسیم بندی و برچسب گذاری شدند، ویژگی های آنها را می توان استخراج کرد و از آنها برای طبقه بندی، مقایسه، دسته بندی یا شناسایی اشیاء مورد نظر، استفاده کرد.
انواع تصویر جهت پردازش تصویر
جعبه ابزار MATLAB از چهار نوع تصویر که شامل تصاویر سطح خاکستری، تصاویر باینری، تصاویر فهرست شده و تصاویر RGB است، پشتیبانی می کند. توضیح مختصری در رابطه با این چهار نوع از تصاویر در زیر آورده شده است.
تصویر خاکستری
تصاویر سطح خاکستری، تصاویر تک رنگ نیز نامیده می شوند. این تصاویر از 8 بیت برای هر پیکسل استفاده می کنند. در این نوع از تصاویر مقدار پیکسل 0 مربوط به رنگ سیاه، مقدار پیکسل 255 مربوط به رنگ سفید و مقادیر میانی نشان دهنده سایه های مختلف خاکستری است. این تصاویر همچنین به عنوان یک آرایه 2 بعدی از پیکسل ها کدگذاری می شوند که هر پیکسل دارای 8 بیت است.
تصاویر باینری
این تصاویر از 1 بیت برای هر پیکسل استفاده می کنند.در مقدار پیکسل این نوع تصاویر، 0 معمولاً به معنای سیاه و 1 به معنای سفید است. این تصاویر به عنوان یک آرایه دو بعدی نشان داده می شوند. اندازه کوچک، مزیت اصلی تصاویر باینری است.
تصاویر نمایی شده
این تصاویر ماتریسی از اعداد صحیح (X) هستند، که در آن هر عدد صحیح، به یک ردیف خاص از مقادیر رنگی در یک ماتریس ثانویه (نقشه)، که به نقشه رنگی معروف است، اشاره دارد.
تصاویر RGB
در یک تصویرRGB، هر پیکسل رنگی به صورت سه گانه نشان داده می شود که حاوی مقادیر اجزایR ، G و B آن پیکسل است. در متلب، یک تصویر رنگی RGB با یک آرایه سه بعدی با ابعاد M×N×3 نشان داده می شود. که در آن M و N به ترتیب ارتفاع و عرض تصویر و 3 تعداد رنگ ها است. برای تصاویر RGB از کلاسdouble، محدوده مقادیر [0.0، 1.0] و برای کلاسهای uint8 وuint16، محدوده مقادیر به ترتیب برابر با [0، 255] و [0، 65535] است.
اکثر الگوریتمهای پردازش تصویر تک رنگ، با استفاده از تصاویر باینری یا مقیاس خاکستری انجام میشوند.
کیفیت تصویر
کیفیت تصویر از نظر وضوح فضایی و کمی سازی تعریف می شود. وضوح فضایی میزان تراکم پیکسل ها بر روی تصویر است. هر چه وضوح فضایی بیشتر باشد، تعداد پیکسل هایی که برای نمایش تصویر استفاده می شوند نیز، بیشتر است. وضوح فضایی به صورت کیفی به عنوان نقطه در اینچ (dpi) بیان می شود.
وضوح تصویر را می توان با استفاده از تابع imresize تغییر داد. دستور imresize (x,1/2) اندازه تصویر را نصف می کند. این کار با گرفتن یک ماتریس از ماتریس اصلی که دارای عناصری است که شاخص های سطر و ستون آنها زوج هستند، انجام می شود. دستور Imresize (x,2) به این معنی است که تمام پیکسل ها برای تولید تصویری با اندازه اصلی، اما با نصف وضوح در هر جهت، تکرار می شوند.
سایر تغییرات وضوح را می توان با استفاده از فاکتورهای مقیاس بندی مورد نظر انجام داد. دستور imresize(imresize(x,1/2),2) وضوح تصویر را به نصف تغییر می دهد در حالی که اندازه تصویر را ثابت نگه می دارد. به طور مشابه، دستور imresize(imresize(x,1/4),4) وضوح تصویر را یک چهارم تغییر می دهد. مجموعه دستورات زیر وضوح تصویر Penguins_grey.jpg را به نصف کاهش می دهند:
A = imread(‘Penguins_grey.jpg’);
A1 = imresize((imresize(A,1/2)),2);
imshow(A1)
شکل 10 تصویر A1 را نشان می دهد.
A = imread(‘Penguins_grey.jpg’);
A2 = imresize((imresize(A,1/4)),4);
imshow(A2)
شکل 11 تصویر A2 را نشان می دهد.
A = imread(‘Penguins_grey.jpg’);
A3 = imresize((imresize(A,1/8)),8);
imshow(A3)
شکل 12 تصویر A3 را نشان می دهد.
کمی سازی تصویر را می توان به عنوان یک فرآیند نقشه برداری توصیف کرد که با استفاده از آن، گروه هایی از نقاط داده ( چند پیکسل در محدوده ای از مقادیر خاکستری ) به یک نقطه (یک سطح خاکستری منفرد) نگاشت می شوند. با استفاده از تابع grayslice می توان یک تصویر را در نرم افزار متلب مجدداً کمی سازی کرد. مجموعه دستورات زیر کمی سازی را به سطح 64 کاهش می دهند و تصویر را نمایش می دهند:
A = imread(‘Penguins_grey.jpg’);
B=grayslice(A,64);
imshow(B,gray(64))
تصویر حاصل از تابع imshow در شکل 13 نشان داده شده است.
مجموعه دستورات زیر سطح کمی سازی را به ۸ کاهش می دهند و تصویر را نمایش می دهند:
A = imread(‘Penguins_grey.jpg’);
B=grayslice(A,8);
imshow(B,gray(8))
تصویر حاصل از تابع imshow در شکل 14 نشان داده شده است.
هیستوگرام
هیستوگرام یک تصویر در مقیاس خاکستری است که، بسامد وقوع سطوح خاکستری را نمایش می دهد. هیستوگرام یک نمودار است که تعداد دفعاتی که هر سطح خاکستری، در تصویر تکرار می شود را نمایش می دهد. در یک تصویر تاریک، سطوح خاکستری (و در نتیجه هیستوگرام) در قسمت پایینی نمودار به هم ریخته است. در یک تصویر روشن یکنواخت، سطوح خاکستری (و در نتیجه هیستوگرام) درقسمت بالایی نمودار، به هم ریخته است و در یک تصویر با کنتراست خوب، سطوح خاکستری (و در نتیجه هیستوگرام) به خوبی در محدوده پخش می شوند.
در متلب، هیستوگرام با استفاده از تابع imhist قابل مشاهده است. به عنوان مثال، از دستورات زیر می توان برای نمایش هیستوگرام تصویر Penguins_grey.jpg استفاده کرد:
A = imread(‘Penguins_grey.
jpg’);
figure(1), imhist(A);
شکل 6 هیستوگرام ایجاد شده توسط دستور بالا را نشان می دهد. سه عملیات اصلی انجام شده بر روی هیستوگرام شامل کشش هیستوگرام، کاهش هیستوگرام و لغزش هیستوگرام می شود که تمام این عملیات ها، در پاراگراف های زیر توضیح داده شده است.
کشش هیستوگرام
این تکنیک که به عنوان برش ورودی نیز شناخته میشود، شامل یک تبدیل خطی است که بخشی از هیستوگرام اصلی را بهگونهای می کشد که محدوده شدت غیرصفر آن، مقیاس خاکستری کاملا پویا را، اشغال کند.
اگر هیستوگرام تصویر در مرکز به هم ریخته باشد، می توان آن را با استفاده از تابع imadjust کشید. دستور زیر هیستوگرام را همانطور که در شکل 7 نشان داده شده است، گسترش می دهد:
imadjust (F, [a,b], [c,d])
مقادیر a, b, c و d باید بین 0 و 1 باشد.
دستور imadjust (F, [], [1,0]) مقدار خاکستری تصویر را معکوس می کند تا، نتیجه ای مشابه نگاتیو عکاسی ایجاد کند.
کشش هیستوگرام با استفاده از دستورات بالا، به ورودی کاربر نیاز دارد و خودکار نیست. یک روش جایگزین برای آن، استفاده از دستور تساوی هیستوگرام است، که یک روش کاملا خودکار می باشد. دستور یکسان سازی هیستوگرام در متلب histeq است. طریقه استفاده از دستور histeq در زیر نشان داده شده است:
A = imread(‘Penguins_grey.jpg’);
HE = histeq(A);
imshow(HE),figure, imhist(HE)
شکل های ۸ و ۹ به ترتیب تصویر و histogram برابر با آن را نشان می دهند.
کلمات کلیدی:
- آموزش پردازش تصویر در متلب pdf
- آموزش پردازش تصویر با پایتون رایگان
- دانلود رایگان کتاب پردازش تصویر در متلب عبدالرحمن حیدری
- کتاب آموزش پردازش تصویر با پایتون
- آموزش پردازش تصویر در متلب به زبان فارسی
- دستور imshow در متلب
- ایجاد تصویر شطرنجی در متلب
- دستورات پردازش تصویر در متلب
فائزه حق شناس
من یک مهندس مکانیک هستم. از وقتی یادم میاد عاشق نوشتن بودم و در حال حاضر با تمام وجود مشغول تولید محتوا هستم.
پروژه ای برای انجام داری؟
تخصص انجام پروژه داری؟
دیدگاه خود را بیان کنید