متلب و ابزار آن برای پردازش تصاویر بزرگ(جلسه7)
موسسه پایاپروژه به عنوان متصدی انجام پروژه های پردازش تصویر با متلب وظیفه ی خود می داند که در راستای آموزش نرم افزار متلب گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی متلب مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
استفاده از Block Processing در متلب به این دلیل انجام میشود که پردازش تصاویر بزرگ به دلیل حجم بالای آنها مشکل است، پس تصاویر به چندین بلوک تقسیم بندی میشوند و عملیات نیز بر روی این بلوک ها انجام میگیرد. برای دریافت اطلاعات بیشتر و همچنین ثبت سفارشات خود با ما همراه باشید.
متلب و ابزار آن برای پردازش تصاویر بزرگ
بعضی اوقات هنگام کار بر روی تصاویر بزرگ، تکنیک های معمولی پردازش تصویر، چندان سازگار نیستند و تصاویر به دلیل حجم بالا یا در حافظه بارگیری نمیشود و یا اینکه انجام عملیات بر روی آن امکان پذیر نیست. در ادامه آموزش متلب با پایا پروژه همراه باشید و آموزش Block Processing برای پردازش تصاویر بزرگ را یاد بگیرید.
استفاده از Block Processing در متلب
با این کار تصویر بزرگ به چندین بلوک کوچک برای کار تقسیم میشود.
- تشخیص لبه های تصویر با تکنیک های معمولی
file_name = ‘cameraman.tif’;
I = imread(file_name);
normal_edges = edge(I,’canny’);
imshow(I)
title(‘Original Image’)

تصویر اولیه
از تابع edge برای یافتن لبه های اشیاء در تصویر استفاده میشود.
imshow(normal_edges)title(‘Conventional Edge Detection’)

نمایش لبه های عکس با استفاده از تکنیک های معمولی
- استفاده از block processing
تابع blockproc از تصاویر TIFF پشتیبانی داخلی دارد و بنابراین نیازی نیست که تصویر با دستور imread در حافظه خوانده شود و از نام آن به عنوان رشته ورودی استفاده میشود.
;edgeFun = @(block_struct) edge(block_struct.data,’canny’)
;block_size = [50 50];block_edges = blockproc(file_name,block_size,edgeFun)
imshow(block_edges)title(‘Block Processing – Simplest Syntax’)

پردازش تصاویر بزرگ با استفاده از blockproc
اما مشکلی که وجود دارد این است که برای تعیین لبه ها به اطلاعات پیکسل های همسایه نیاز است و به این معنی است که هر بلوک نمیتواند به صورت کامل و جدای از پیکسل های اطرافش پردازش شود. برای حل این مشکل از پارامتر BorderSize برای تعیین حدود افقی و عمودی در هر بلوک استفاده میشود.
;border_size = [10 10]
block_edges =
;blockproc(file_name,block_size,edgeFun,’BorderSize’,border_size)
imshow(block_edges)title(‘Block Processing – Block Borders’)

پردازش تصاویر بزرگ با استفاده از blockproc
با اینکه بلوک ها با 10 پیکسل اضافی در حال پردازش هستند، اما نتیجه همچنان با آنچه انتظار داریم برابر نیست. دلیل آن هم این است که الگوریتم تشخیص لبه Canny از آستانه ای که بر اساس هیستوگرام کامل تصویر محاسبه میشود استفاده میکند؛ بنابراین استفاده از blockproc به معنای استفاده از هیستوگرام ناقص است.
دریافتن به این محدودیت اقدام مهمی است که باعث میشود به نتایج مطلوب خود دست پیدا کنید. راه حل این مشکل و محدودیت این است که از مقدار ثابت 0.9 به عنوان آستانه ثابت برای تابع edge استفاده کنید. این مقدار با آزمون و خطا تعیین شده است.
;thresh = 0.09;edgeFun = @(block_struct) edge(block_struct.data,’canny’,thresh)
=block_edges
;blockproc(file_name,block_size,edgeFun,’BorderSize’,border_size)
imshow(block_edges)title(‘Block Processing – Borders & Fixed Threshold’)

پردازش تصاویر بزرگ با استفاده از blockproc
نتیجه پردازش تصاویر بزرگ با استفاده از blockproc اکنون آن چیزی است که باید باشد. برای انجام پروژه های متلب و سفارش پروژه های متلب با ما همراه باشید.
منابع:
