گاهی اوقات نیاز هست که آستانه گیری به صورت خودکار انجام شود و کاربر حد آستانه را تعیین نکند. اگر نیاز داشته باشیم که مقدار آستانهی تصویر به صورت خودکار انتخاب شود میتوان از روش Otsu استفاده کرد. در ادامهی این مقاله می خواهیم به معرفی روش آستانه گذاری otsu در پردازش تصویر بپردازیم.
چه مواقعی می توان از روش آستانه گذاری otsu استفاده کرد؟
به هیستوگرام زیر دقت کنید، این هیستوگرام مربوط به یک تصویر دو حالته یا bimodal است. وقتی هیستوگرام یک تصویر دارای دو قله (peak) باشد به آن تصویر bimodal می گویند. برای آستانه گیری از این نوع تصاویر، بهترین انتخاب، مینیمم مقدار بین دو قله می باشد.
آستانه گذاری به روش otsu در پردازش تصویر
یکی از کتابخانه های معروف برای پردازش تصویر OpenCv هست که در زبان های پایتون (python) و سی پلاس پلاس (C++) می توان از آنها استفاده کرد. همچنین برای C#.net می توان از Emgu و یا Accord استفاده کرد. در ادامه با نحوه برنامه نویسی آستانهگیری به روش اتسو (otsu) آشنا خواهید شد.
آستانه گذاری خودکار به روش اتسو در سی شارپ (C#.net)
آستانه گذاری با استفاده از کتابخانه Accord
اگر از کتابخانه accord در C# استفاده می کنید می توانید از دستورات زیر استفاده کنید. در ابتدا باید یک فیلتر از نوع OtsuThreshold ایجاد کنیم و سپس با استفاده از تابع ApplyInPlace فیلتر اتسو (otsu) را به عکس مورد نظر اعمال کنیم. از آنجایی که مقدار آستانه گیری (Threshold) به صورت خودکار تعیین شده است با استفاده از دستور filter.ThresholdValue میتوان مقدار آستانه را بدست آورد.
OtsuThreshold filter = new OtsuThreshold( ); filter.ApplyInPlace( image ); byte t = filter.ThresholdValue;
روش آستانه گیری با استفاده از کتابخانه Emgu
اگر از کتابخانه emgu در c# استفاده میکنید. به راحتی می توانید از دستور CvInvoke.Threshold استفاده کنید. تابع Threshold چندین مقادر ورودی میگیرد. در ادامه تمامی این پارامترها را معرفی میکنیم.
CvInvoke.Threshold(grayImg, binImg, 100, 255, ThresholdType.Otsu);
- مقدار اول: عکس ورودی که قرار هست عملیات آستانه گیری روی آن اجرا شود.
- مقدار دوم: عکس خروجی که نتیجه نهایی در آن ذخیره میشود.
- مقدار سوم: این مقدار را هر عددی می توانید قرار دهید و در خروجی اثری ندارد.
- مقدار چهارم: حداکثر می تواند 255 باشد که نشان دهنده ماکزیمم رنگ در تصویر نهایی هست
- مقدار پنجم: نوع آستانه گیری را تعیین میکند.
روش آستانه گذاری otsu در پایتون با OpenCv
در پایتون با استفاده از دستور cv2.threshold میتوان فیلتر آستانه گیری otsu را به تصویر مورد نظر اعمال کرد. این دستور چهار ورودی میگیرد و دو مقدار برمیگرداند که در ادامه به توضیح این موارد میپردازیم.
ret,th = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
ورودی های تابع cv2.threshold
- ورودی اول: تصویر ورودی که عملیات آستانه گیری روی آن اجرا خواهد شد.
- مقدار دوم: این مقدار را هر عددی می توانید قرار دهید و در خروجی اثری ندارد.
- مقدار سوم: حداکثر می تواند 255 باشد که نشان دهنده ماکزیمم رنگ در تصویر نهایی هست
- مقدار چهارم: نوع آستانه گیری را تعیین میکند.
خروجیهای تابع cv2.threshold
- خروجی اول: مقدار آستانه خودکار
- خروجی دوم: تصویر خروجی پس از اعمال فیلتر otsu