استخراج لبه
استخراج لبه
لبه یابی
لبهیابی یکی از مهمترین تکنیکها در پردازش تصویر است که برای شناسایی مرزهایی در تصویر استفاده میشود که تغییرات شدت روشنایی (Intensity) پیکسلها در آنها قابلتوجه است. لبهها معمولاً نشاندهنده مرز بین اشیاء یا مناطق مختلف در تصویر هستند و در کاربردهایی مانند تشخیص اشیاء، تقسیمبندی تصویر (Segmentation)، و تحلیل تصاویر پزشکی نقش کلیدی دارند.
لبهیابی با مفاهیم فیلترهای بالاگذر (High-Pass Filters) در حوزه فرکانس مرتبط است، زیرا لبهها معمولاً با تغییرات سریع در شدت روشنایی (فرکانسهای بالا) مشخص میشوند. این فرآیند را میتوان هم در حوزه مکان (Spatial Domain) با استفاده از کرنلهای مشتقگیر و هم در حوزه فرکانس با فیلترهای بالاگذر انجام داد. در این مقاله، الگوریتمهای رایج لبهیابی را معرفی کرده و با مثالهای عملی در متلب، عملکرد آنها را بررسی میکنیم.
الگوریتمهای لبهیابی
الگوریتمهای لبهیابی به دو دسته اصلی تقسیم میشوند:
- مبتنی بر مشتق: این روشها از مشتقگیری (یا محاسبه گرادیان) برای شناسایی تغییرات سریع در شدت روشنایی استفاده میکنند. الگوریتمهای معروف این دسته:
- Sobel: از کرنلهای 3×3 برای محاسبه گرادیان در جهتهای افقی و عمودی استفاده میکند.
- Prewitt: مشابه Sobel، اما با کرنلهای سادهتر.
- Roberts: از کرنلهای 2×2 برای محاسبه گرادیان در جهتهای مورب استفاده میکند.
- Zero-Cross: مبتنی بر شناسایی نقاطی که مشتق دوم (لاپلاسین) صفر میشود.
- مبتنی بر گرادیان پیشرفته: این روشها معمولاً پیچیدهتر هستند و شامل مراحل اضافی مانند حذف نویز میشوند. معروفترین الگوریتم این دسته:
- Canny: یک الگوریتم چندمرحلهای که به دلیل دقت بالا و توانایی حذف نویز، پرکاربردترین روش لبهیابی است.
- LoG (Laplacian of Gaussian): ترکیبی از فیلتر گاوسی برای کاهش نویز و لاپلاسین برای تشخیص لبه.
| الگوریتم | مزایا | معایب |
|---|---|---|
| Sobel | سریع، ساده، مناسب برای نویز کم | حساس به نویز، لبههای ضخیم |
| Prewitt | مشابه Sobel، محاسبات ساده | حساس به نویز |
| Roberts | مناسب برای لبههای مورب | بسیار حساس به نویز |
| LoG | دقیق در تصاویر پیچیده | محاسبات سنگین، حساس به نویز |
| Zero-Cross | مناسب برای لبههای ظریف | نیاز به تنظیم دقیق پارامترها |
| Canny | دقیق، مقاوم به نویز، لبههای نازک | محاسبات پیچیدهتر |
پیادهسازی در متلب
متلب تابع آمادهای به نام edge ارائه میدهد که امکان اعمال الگوریتمهای مختلف لبهیابی را فراهم میکند. در کد زیر، عملکرد الگوریتمهای مختلف روی تصویر نمونه بررسی شده است.
I = imread('cameraman.tif');
for i = 1:6
if i ==1
BW = edge(I,'Sobel');
elseif i ==2
BW = edge(I,'Prewitt');
elseif i == 3
BW = edge(I,'Roberts');
elseif i == 4
BW = edge(I,'log');
elseif i == 5
BW = edge(I,'zerocross');
elseif i == 6
BW = edge(I,'Canny');
end
subplot (2,3,i) ,imshow(BW)
end
Sobel و Prewitt: لبههای اصلی را بهخوبی تشخیص میدهند، اما ممکن است در تصاویر نویزی خطاهایی داشته باشند.
Roberts: به دلیل استفاده از کرنلهای کوچکتر، لبههای مورب را بهتر تشخیص میدهد، اما به نویز حساس است.
LoG و Zero-Cross: لبههای دقیقتری ارائه میدهند، اما ممکن است لبههای ضعیف را از دست بدهند.
Canny: به دلیل مراحل چندگانه (نرمسازی گاوسی، محاسبه گرادیان، حذف لبههای ضعیف با آستانهگذاری، و اتصال لبهها)، دقیقترین و مقاومترین نتایج را در برابر نویز ارائه میدهد.

کاربردهای لبهیابی
- تشخیص اشیاء: شناسایی مرزهای اشیاء در تصاویر برای کاربردهایی مانند رباتیک و بینایی ماشین.
- تقسیمبندی تصویر: جداسازی مناطق مختلف تصویر (مانند پیشزمینه و پسزمینه).
- پردازش تصاویر پزشکی: تشخیص ساختارهای مهم در تصاویر MRI یا CT.
- یادگیری عمیق: استفاده از لبهها بهعنوان ویژگیهای ورودی در شبکههای کانولوشنی (CNN).
نتیجهگیری
لبهیابی یکی از مهمترین مراحل در پردازش تصویر است که با استفاده از الگوریتمهای مبتنی بر مشتق (مانند Sobel، Prewitt، Roberts) یا گرادیان پیشرفته (مانند Canny) انجام میشود. متلب با ارائه تابع edge و ابزارهای مرتبط، پیادهسازی این الگوریتمها را آسان میکند. همچنین، با درک اصول فیلترهای بالاگذر و گرادیان، میتوان الگوریتمهای لبهیابی را بهصورت دستی پیادهسازی کرد. در آموزشهای بعدی، به بررسی تکنیکهای پیشرفتهتر مانند تقسیمبندی تصویر و کاربردهای لبهیابی در یادگیری عمیق خواهیم پرداخت.

دیدگاه (5)
م
بسیار عالی و حرفه ای دست مریزاد من که خیلی استفاده کردم
مینا ناصری نسب
ممنون امیدوارم در درک مباحث کمکتون کنه
س
سلام ببخشید اگر بخوایم خودمون الگوریتمی بنویسم بدون استفاده از تابع های آماده متلب باید چطور نوشته بشه که لبه رو استخراج کنه ؟
س
سلام ببخشید اگر بخوایم خودمون الگوریتمی بنویسم بدون استفاده از تابع های آماده متلب باید چطور نوشته بشه که لبه رو استخراج کنه ؟
مینا ناصری نسب
سلام
نوشتن خود الگوریتم برای استخراج لبه مبتنی بر طراحی ماتریسی هست ک با کانولوشن در مکان یا ضرب در حوزه فرکانس منجر به استخراج لبه بشه
و اکثرا فیلتر های بالاگذر این کار انجام می دهد پس باید از مفاهیم فیلتر های بالاگذر استفاده کنید