استخراج اسکلت بندی اشیاء

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

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

در حالت کلی الگوریتم های استخراج اسکلت الگو بر پایه دو استراتژی مختلف هستند.

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

تعاریف اولیه

همسایه های هشتگانه پیسکل P1 را در نظر بگیرید :

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

  • تابع B: تعداد همسایه های غیرصفر P1 را برمی گرداند.
  • تابع A : تعداد الگوهای 1،0 در لیست P2,P3,P4,P5,P6,P7,P8,P9,P2 را بر می گرداند. الگوی 0,1 بدین معنی است که با در نظر گرفتن دو همسایه پشت سرهم مثل P6 و P7، مقدار P6 صفر بوده و P7 مقدار 1 داشته باشد. به عنوان مثال :

الگوریتم اسکلت بندی

الگوریتم Hilditch از یک پنجره 3*3 استفاده کرده و تازمانی تغییری در تصویر به وجود آید، به طور مداوم همه پیکسل های تصویر را بررسی می کند و به ازای هر پیکسل در صورتی که چهار شرط زیر برقرار شود، پیکسل جاری از تصویر حذف می گردد :

شبه کد زیر نحوه اعمال این الگوریتم را نشان می دهد :

  1. تازمانی که تغییر دیگری حاصل نشود :
    • کل تصویر پیمایش شده و پیکسل هایی که هر چهار شرط فوق برای آنها صادق باشد کاندیدای حذف شدن می شوند.
    • پیکسل های کاندیدای حذف شدن ، از تصویر حذف می شوند

تتوجه داشته باشید که الگوریتم Hilditch الگوریتم کاملی نمی باشد چرا که بر روی برخی از انواع الگوها به درستی عمل نمی کند. به عنوان مثال الگوریتم Hilditch باعث ساییده شدن کامل الگوهای زیر می شود :

در زیر اسکلت استخراج شده برای تعدادی تصویر با استفاده از الگوریتم Hilditch نشان داده شده است :

پردازش تصویر در MATLAB

استخراج اسکلت تصویر در MATLAB با استفاده از تابع bwmorph انجام می پذیرد.

>> BW1 = imread('circbw.tif');
>> BW2 = bwmorph(BW1,'skel',Inf);
>> imshow(BW1),figure, imshow(BW2)