در این پروژه قصد داریم روش جدیدی جهت قطعه بندی تصاویر رنگی بااستفاده از سیستمهای فازی معرفی نماییم.به عبارتی دیگر در تصاویر رنگی ، نواحی مشابه از لحاظ رنگ را جدا کرده و تصویررا به قطعات مشابه تقسیم می نماییم.
با توجه به این که به طور معمول تصاویر رنگی در فضای RGB ذخیره می شوند وسیستم FIS ما به پارامترهای فضای HSL نیاز دارد لذا در ابتدا تصاویر ورودی را به فضای موردنظر برده سپس هر پیکسل از تصویر را به سیستم FIS می دهیم تا رنگ پیکسل موردنظر را تشخیص دهد ودر انتها پیکسلهایی که از لحاظ رنگ مشابه بودند رابه صورت جداگانه نمایش می دهیم.
در این پروژه علاوه بر پیاده سازی روش مقاله مورد نظر، کمی تغییرات در نحوه پیاده سازی ایجاد نمودیم که باعث افزایش سرعت تشخیص شد.و آن استفاده از روابط موجود بین همسایگان یک پیکسل می باشد که توضیحات کامل آن در قسمت شبیه سازی آورده شده است.
1.مقدمه:
قطعه بندی عملیاتی جهت تقسیم بندی تصویر به نواحی یکنواخت می باشد.
بنابراین قطعه بندی عملیاتی مقدماتی جهت تشخیص اشیا موجود در تصویر است.
هدف از این پروژه دسته بندی تصاویر رنگی به کمک روش فازی می باشد.
هر شی یک رنگ منحصر به فرد دارد.
هدف تشخیص هر شی بر اساس رنگ آن است.
کاربردها :
قطعه بندی تصویر از مسائل مهم در زمینه های مختلف پردازش می باشد که از جمله کاربردهای می توان به موارد زیر اشاره نمود :
• کاربرد در پزشکی
• تشخیص محتوای سایت ها
• تشخیص پوست در تصاویر
• فیلتر کردن سایت های غیر اخلا قی
روشها :
برای پیاده سازی، روشهای متفاوتی ارائه شده است که از جمله آنها می توان support vector machines ، روشهای هیستوگرام وروشهای فازی را نام برد.
در روشهای هیستوگرام سگمنت بندی براساس شباهت رنگ انجام می گیرد ودر بعضی الگوریتم ها بر اساس ناحیه ،سگمنت بندی انجام می گیرد.
تکنیک های قطعه بندی تصاویر با استفاده از رنگ را می توان در پنچ دسته گنجاند :
• قطعه بندی بر اساس پیکسل [2]
• قطعه بندی براساس تشخیص لبه [5][4]
• قطعه بندی ترکیبی براساس لبه وناحیه [6]
• قطعه بندی بر اساس خوشه بندی [10][9][8][7]
قطعه بندی تصاویر رنگی بااستفاده از دسته بندی فازی یکی از روشهای قطعه بندی بر اساس پیکسل می باشد.
به این ترتیب که سیستم فازی مشخص می کند هر پیکسل به کدام دسته رنگ تعلق دارد .بنابراین هدف ایجاد یک سیستم فازی است که بتواند رنگهای بیشتری را دسته بندی نماید.
برای این کار نیاز به یک فرد خبره است که با توجه به داه های آموزشی ، قوانین و توابع راتنظیم نماید که امری وقت گیر می باشد .لذا نیاز به یک روش اتوماتیک است که باتوجه به داده های آموزشی قوانین وتوابع عضویت فازی را ایجاد نماید .روشهای زیادی برای این منظور ابداع شده است که از جمله تقسیم کردن فضای وردیهای سیستم فازی می باشد.
2.دسته بندی رنگ فازی:
دسته بندی فازی یک روش یادگیری با ناظر است که جهت قطعه بندی تصاویر استفاده می شود .این سیستم هر پیکسل رنگی از تصویر ورودی را در یک دسته رنگ قرار می دهد.
فضاهای رنگ متنوعی مانند HSV,YIQ,HSL,RGB در پردازش تصاویر استفاده می شود.[1]
فضاهای رنگ متنوعی مانند HSV,YIQ,HSL,RGB در پردازش تصاویر استفاده می شود.[1] فضای رنگ RGB یکی از فضا های رنگ متداول فضای رنگ RGB می باشد که شامل سه رنگ قرمز وآبی وسبز می باشد وهر کدام در بازه صفر تا یک ویا 0 تا 255 تغییر می کنند حداقل مقدار (رنگ سیاه ) (0و0و0) بوده وحداکثر مقدار (رنگ سفید )(255و255و255) می باشد.
این فضای رنگ اغلب در روشهای هیستوگرام استفاده می گردد بطوریک رنگ هر پیکسل در سه رنگ آبی وسبز وقرمز توزیع می شود.
وبراساس میزان شباهت عمل می کند.
اما روش هیستوگرام روش سختی بوده و همچنین نمی توان براحتی درجه تابع را برای آن تعریف نمود.
فضای رنگ HSL این فضا از بهترین فضاهای رنگ برای الگوریتم های قطعه بندی می باشد.
دلایل آن را می توان اینگونه بیان کرد: دراین فضا رنگ به صورت مستقیم توسط پارامتر Hue مشخص می شود واکثر رنگ ها به استثنا رنگ های که خیلی کم رنگ وپررنگ می باشند براحتی توسط این پارامتر قابل تشخیص می باشندکه این امکان در فضا های رنگ دیگر وجود ندارد.
ویژگیهای ادراکی رنگ ازقبیل Hue(H) , Saturation(S) , Lightness(L) که توسط این فضا قابل توصیف می باشد توسط فضاهای رنگ دیگر قابل بیان نمی باشد.
این فضا خیلی به سیستم بینایی انسان شبیه می باشد.
در این فضا رنگ(H) و روشنایی (L) از هم قابل تفکیک هستند.
این دلایل باعث شده که این فضا از بین فضاهای دیگر بیشتر مورد توجه قرارگیرد.
به علت اینکه در فضای HSL رنگ در بعد H نمایش داده می شود ودر بعد S,L توصیف کننده رنگ می باشند لذا در این پروژه از فضای رنگ HSL استفاده شده است.[1] بعد H به صورت دایره ای نمایش داده می شود که هر رنگ در محدوده ای از درجه زوایا قرار دارد.
توزیع رنگ در بعد H یکنواخت نمی باشد .به عنوان مثال مجموعه فازی H را می توان با 11 تابع عضویت نمایش داد.
توابع عضویت می توانند به صورت های مختلف های مختلفی چون ذوزنقه ای ، زنگوله ای ، مثلثی ، گوسی و...
باشند.در شکل زیر نمونه ای از توابع عضویت از مجموعه فازی H که ذوزنقه ای شکل اند، مشاهده می شود.
هرکدام از توابع عضویت براساس شکلشان دارای تعداد پارامترهای خاصی می باشند.تابع ذوزنقه ای به چهار پارامتر نیاز دارد.
که به عنوان مثال برای محاسبه مقدار تابع عضویت رنگهای مختلف در Hue می توان از فرمول زیر استفاده نماییم[1] : به عنوان مثال اگر به خواهیم تابع عضویت را برای رنگ نارنجی بنوسیم به صورت زیر خواهد شد[1].
دو بعد دیگر S,L عملا رنگی ندارندوتوصیف کننده رنگ می باشند.
هر بردار به سه قسمت ضعیف ، متوسط وقوی تقسیم می شود.دوبردار را باهم ترکیب کرده وبه صورت نموداری دوبعدی آنها را در نظر می گیریم .با ترکیب این دو بردار باهم نه ناحیه توصیف رنگ حاصل می گردد.
هرکدام از نواحی توصیف رنگ دارای یک تابع عضویت می باشد.
اما با این تفاوت که توابع عضویت هم بایدL,S را بپوشاند.پس این توابع عضویت را در فضای سه بعدی رسم می نماییم.
بنابراین سه تابع عضویت برای بعد S وسه تابع عضویت برای بعد L در نظرگرفته می شود.
ترکیب مجموعه های فازی فوق در شکل زیر نشان داده شده است[1].
برای دو پارامتر S,l می توان تابع عضویت را به صورت زیر در نظر بگیریم[1] : هر قانون فازی را به صورت زیر نمایش می دهیم: R تعدادقوانین فازی ،m تعداد ابعاد ورودی ،Hj خروجی قوانین ،M تعداد دسته های رنگ ،CFj=[0 1] ضریب قطعیت قانون jام است.
درجه عضویت مربوط به مجموعه فازی بر اساس نوع تابع عضویت آن مجموعه فازی محاسبه می گردد.
3.شبیه سازی الگوریتم: برای پیاده سازی روش قطعه بندی تصاویر در ابتدا می بایست سیستم FIS را طراحی نمود .
این سیستم شامل سه پارامتر H,S,L به عنوان ورودی ویک خروجی که نشان دهنده رنگ پیکسل مورد نظر است می باشد .
همانطور که می دانید تصاویر در فضای رنگ RGB ذخیره می شوند.
لذا از آنجایی که ما نیاز به تصاویر در فضای HSL داریم بعد از خواندن تصویر آن را توسط تابع COLORSPACE به فضای رنگ HSL تبدیل می کنیم.
img1=imread('21.png'); S = 'RGB->HSL'; img = COLORSPACE(S,img1); بعد ازعملیا ت تبدیل ، توسط دستور ذیل سه قسمت H,S,L تصویر را در ماتریس های جداگانه قرار می دهیم.
H=img(:,:,1); S= img(:,:,2); L=img(:,:,3); که در سیستم FIS این سه پارامتر ورودی به صورت زیر طراحی شده است: پارامتر H: همانطور که قبلا هم گفته شد پارامتر Hue نشان دهتده رنگ تصویر می باشد و مقدار آن از صفر تا 360 درجه قابل تغییر می باشد.
مجموعه فازی H را می توان با 11 تابع عضویت نمایش داد.
که این توابع عضویت می توانند به صورت های مختلف های مختلفی چون ذوزنقه ای ، زنگوله ای ، مثلثی ، گوسی و...
پارامتر L: پارامتر Lightness نشان دهنده روشنایی تصویر می باشد که در عمل توصیف کننده رنگ تصویر بوده ومقدار آن بین صفر تا یک تغییر می کند.
ودارای سه تابع عضویت ضعیف ، متوسط و قوی می باشد که به صورت زیر طراحی می نماییم.
پارامتر S : این پارامتر هم توصیف کننده رنگ تصویر می باشد که مقدار آن بین صفر تا یک تغییر کرده ودارای سه تابع عضویت ضعیف ، متوسط و قوی بوده وبصورت زیر طراحی می نماییم.
سپس در یک حلقه تودرتوسه پارامترH,S,L مربوط به تک تک پیکسلهای تصویر را به عنوان ورودی به سیستم FIS خود می دهیم این سیستم براساس مقادیر H,S,L یک خروجی را به ما بر می گرداند که این نتیجه در ماتریس OUT نگهداری می شود.
for i=2:r for j=2:c-1 h1=H(i,j); s1=S(i,j); l1=L(i,j); if(h1==H(i-1,j))&(s1==S(i-1,j))&(l1==L(i-1,j))&(out(i-1,j)~=0) out(i,j)=out(i-1,j); else if(h1==H(i-1,j-1)&s1==S(i-1,j-1)&l1==L(i-1,j-1)&out(i-1,j-1)~=0) out(i,j)=out(i-1,j-1); else if(h1==H(i-1,j+1)&s1==S(i-1,j+1)&l1==L(i-1,j+1)&out(i-1,j+1)~=0) out(i,j)=out(i-1,j+1); else if(h1==H(i,j-1)&s1==S(i,j-1)&l1==L(i,j-1)&&out(i,j-1)~=0) out(i,j)=out(i,j-1); else ou=evalfis([h1,s1,l1],fs); out(i,j)=ou; end; end; end; end; end; end; خروجی سیستم FIS تمام ترکیبهای ممکن H,S,L را شامل می شود از آنجایی که H دارای 9 تابع عضویت وH,S هم هر کدام شامل سه تابع عضویت می باشند لذا خروجی این سیستم دارای 81 تابع عضویت می باشد که به صورت زیر طراحی می نماییم.
خروجی به این صورت طراحی شده است که خروجی اول رنگ قرمزکم رنگ، خروجی دوم رنگ قرمز معمولی یا متوسط وخروجی سوم هم رنگ قرمز پررنگ را شامل می شود.
و به این ترتیب سایر خروجی هم تعریف می شوند.
قوانین نوشته در این سیستم FIS شامل تمام تر کیبهای سه پارامتر ورودی بوده لذا این سیستم دارای 81 قانون می باشد که به ترتیب هر قانون یک رنگ خاص را نتیجه می دهد.
قوانین همسایگی : در این پروژه می توان از قوانین همسایگی پیکسلهای مجاور جهت افزایش سرعت اجرای الگوریتم استفاده نمود.
دلیل این کار را می توان اینگونه بیان کرد که در اکثر مواقع پیکسلهایی که در مجاورت هم قرار دارند دارای رنگ مشابهی هستند لذا برای هر پیکسل قبل از آن که به سیستم FIS ارسال شده تا رنگ آن تشخیص داده شود می توان مقادیر H,S,L آن پیکسل را با پیکسلهای مجاور آن مقایسه کرد، در صورتی که با یکی از پیکسلهای همسایه خود مقادیر یکسان داشته باشد می توان خروجی FIS را که برای آن پیکسل محاسبه شده بود را برای این پیکسل هم قرار دهیم .این عمل باعث می شود تعداد پیکسلهای زیادی که مقادیر H,S,L آنها یکسان هستند فقط یکبار محاسبه شده تا سرعت الگوریتم افزایش یابد.
اما اگر مشابه پیکسلهای مجاور خود نباشد توسط FIS آن را محاسیه می کنیم که برای این کار می توان از کد زیر استفاده نمود.
if(h1==H(i-1,j))&(s1==S(i-1,j))&(l1==L(i-1,j))&(out(i-1,j)~=0) out(i,j)=out(i-1,j); else if(h1==H(i-1,j-1)&s1==S(i-1,j-1)&l1==L(i-1,j-1)&out(i-1,j-1)~=0) out(i,j)=out(i-1,j-1); else if(h1==H(i-1,j+1)&s1==S(i-1,j+1)&l1==L(i-1,j+1)&out(i-1,j+1)~=0) out(i,j)=out(i-1,j+1); else if(h1==H(i,j-1)&s1==S(i,j-1)&l1==L(i,j-1)&&out(i,j-1)~=0) out(i,j)=out(i,j-1); else ou=evalfis([h1,s1,l1],fs); out(i,j)=ou; end; 4.نتیجه گیری: با توجه به اهمیت وکاربرد، سگمنت بندی تصاویر مورد توجه قرار گرفته شده است وروشهای متفاوتی برای آن ارائه شده است که هریک از این روش ها از لحاظ زمان اجرا واز لحاظ دقت تشخیص دارای معایب ومزایای هستند که از میان این روشها ،روشهای فازی دارای سرعت ودقت بالایی در تشخیص هستند.در این پروژه هم روش جدیدی از قطعه بندی تصاویر رنگی بااستفاده از روش فازی پیاده سازی شد که سرعت آن را با استفاده قوانین همسایگی در تصاویر افزایش دادیم که به نتایج خوبی هم رسیدیم که در زیر نتایج آن را مشاهده می کنیم.
5.مراجع: [1] A.A.
Younes, I.
Truck, and H.
Akdaj, “Color Image Profiling Using Fuzzy Sets,” Turk J Elec Engin, vol.13, no.3, 2005.
[2] G.A.
Ruz, P.A.
Est6vez, and C.A.
Perez, "A Neurofuzzy Color Ifnage Segmentation Method for Wood Surface Defect Detection," Forest Prod.
J.
55 (4), 52-58, 2005.
[3] A.
Moghaddamzadeh and N.
Bourbakis, "A Fuzzy Region Growing Approach for Segmentation of Color Images," Pattern Recognition, 30(6):867-881, 1997.
[4] G.S.
Robinson, “Color Edge Detection,” Opt.
Eng, 16(5): 479-484, 1977.
[5] J.
Canny, “A Computational Approach to Edge Detection,” IEEE Trans.
Pattern Anal.
Mach.
Intell, 8(6): 679-698, 1986.
[6] A.
Shiji and N.
Hamada, “Color Image Segmentation Method Using Watershed Algorithm and Contour Information,” Proc.
Inter.
Conf.
on Image Processing, 4:305-309, 1999.
[7] B.
Zhang, “Generalized K-harmonic Means–boosting in Unsupervised Learning,” Technical report (HPL-2000–137), Hewlett-Packard Labs, 2000.
[8] J.
Bezdek, “A Convergence Theorem for the Fuzzy ISODATA Clustering Algorithms,” IEEE Trans Pattern Anal Mach Intell, 2:1-8, 1980.
[9] K.
Huang, “A Synergistic Automatic Clustering Technique (Syneract) for Multispectral Image Analysis,” Photogrammetric Eng Remote Sens, 1(1):33–40, 2002.
[10] M.G.H.
Omran, A.
Salman, and A.P.
Engelbrecht, “Dynamic Clustering Using Particle Swarm Optimization with Application in Image Segmentation,” Pattern Anal Applic, 8: 332–344, 2005.
پیوست: کد برنامه: clear all; img1=imread('11.jpg'); S = 'RGB->HSL'; img = COLORSPACE(S,img1); H=img(:,:,1); S= img(:,:,2); L=img(:,:,3); [r,c]=size(L); out=zeros(r,c); fs=readfis('cs22.fis'); for j=1:c h1=H(1,j); s1=S(1,j); l1=L(1,j); ou=evalfis([h1,s1,l1],fs); out(1,j)=ou; end; for i=1:r h1=H(i,1); s1=S(i,1); l1=L(i,1); ou=evalfis([h1,s1,l1],fs); out(i,1)=ou; end; for i=1:r h1=H(i,c); s1=S(i,c); l1=L(i,c); ou=evalfis([h1,s1,l1],fs); out(i,c)=ou; end; for i=1:r h1=H(i,1); s1=S(i,1); l1=L(i,1); ou=evalfis([h1,s1,l1],fs); out(i,1)=ou; end; for i=2:r for j=2:c-1 h1=H(i,j); s1=S(i,j); l1=L(i,j); if(h1==H(i-1,j))&(s1==S(i-1,j))&(l1==L(i-1,j))&(out(i-1,j)~=0) out(i,j)=out(i-1,j); else if(h1==H(i-1,j-1)&s1==S(i-1,j-1)&l1==L(i-1,j-1)&out(i-1,j-1)~=0) out(i,j)=out(i-1,j-1); else if(h1==H(i-1,j+1)&s1==S(i-1,j+1)&l1==L(i-1,j+1)&out(i-1,j+1)~=0) out(i,j)=out(i-1,j+1); else if(h1==H(i,j-1)&s1==S(i,j-1)&l1==L(i,j-1)&&out(i,j-1)~=0) out(i,j)=out(i,j-1); else % fs=readfis('cs22.fis'); ou=evalfis([h1,s1,l1],fs); out(i,j)=ou; end; end; end; end; end; end; img2=zeros([r,c,3]); img2=img1; k=1 while k img2=zeros([r,c,3]); img2=img1; for i=1:r for j=1:c if(out(i,j)=k+9) img2(i,j,1)=255; img2(i,j,2)=255; img2(i,j,3)=255; end; end; end; figure,imshow(img2); k=k+9; end; تصویر اصلیتصویر اصلیرنگ قرمزرنگ سبزرنگ زردرنگ بنفشرنگ سیاهرنگ آبی کم رنگتصویر اصلیتصویر اصلیرنگ آبیرنگ قرمزرنگ زرد پررنگرنگ زرد تصویر اصلیتصویر اصلیرنگ قرمزرنگ بنفش