آستانه گیری خودکار Otsu - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آستانه گیری خودکار Otsu

+2 امتیاز
سلام دوستان .اگر در مواردی نیاز داشته باشیم که مقدار آستانه تصویر را به صورت خودکار انتخاب شود یکی از روش های پیشنهادی روش Otsu هست آیا کسی در مورد عملکرد این الگوریتم اطلاع داره؟
سوال شده دی 30, 1392  بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

2 پاسخ

+6 امتیاز
 
بهترین پاسخ

زمانیکه نیاز به محاسبه خودکار آستانه داشته باشید یکی از روش های پیشنهادی Otsu هستش . به طور مثال فرض کنید که تصویر ورودی شما bimodal باشد تصویر bimodal یعنی اینکه هیستوگرام تصویر شما دارای دو peak باشد حالا بهترین مقدار نقطه وسط این peak ها هستش.

این روش کلیه آستانه ها از صفر تا 255 را بررسی می کنه و در هر بار میزان واریانس درون کلاسی برای سمت چپ موقعیت و سمت راست آن محاسبه می کنند و سپس این 2 مقدار را با هم جمع می نمایید .

اینکار برای کلیه آستانه تکرار می گردد در پایان هر آستانه ای که دارای کوچکترین مقدار باشه به عنوان آستانه نهایی معرفی میشه. نحوه محاسبه واریانس درون کلاسی به صورت زیر می باشد ابتدا برای هر سطح احتمال آن را محاسبه می کنیم (تعداد فرکانس های در آن سطح تقسیم بر مجموع مقادیر کلیه سطوح(مساحت تصویر)) Image_area = image.width * image.height P(i) = level(i) / image_area حال احتمال را برای همه سطوح محاسبه کردیم در ادامه توزیع تجمعی استفاده می کنم.

پاسخ داده شده بهمن 1, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده بهمن 10, 1392 بوسیله ی مصطفی ساتکی
0 امتیاز

سلام.

 

اینم کدی برای اوتسو:

 

im=imread('Fig0222(b)(cameraman).tif');

bw_im=im2bw(im);

%%code normal therseholding
T=mean(mean(im));
done=false;
while ~done
        index1=find(im<T);
        G1=im(index1);

        index2=find(im>=T);
        G2=im(index2);

        m1=mean(G1);
        m2=mean(G2);

        T_next=0.5*(m1+m2);

        if(abs(T-T_next)<0.2)
           done=true; 
        end
        T=T_next;
end
T=T/255;
normal_theresh_im=im2bw(im,T);
imshow(normal_theresh_im);

 

پاسخ داده شده خرداد 6, 1394 بوسیله ی Manam (امتیاز 35)   4 6 7
...