У комп'ютерному баченні та обробці зображень метод Оцу, названий на честь [en] (大津展之 Ōtsu Nobuyuki), є методом, заснованим на кластеризації, для автоматичного обчислення порогового зображення, або зведення сірого зображення до бінарного зображення. Алгоритм передбачає, що зображення містить два класи пікселів, наступної бі-модальної гістограми: пікселі переднього плану і пікселі тла, потім обчислюється оптимальний поріг, що розділяє два класи, так, що їх комбінований діапазон (дисперсія кластера) є мінімальною або рівноцінною (тому що сума попарних квадратичних відстаней постійна), так, що їх міжкластерна дисперсія є максимальною. Отже, метод Оцу є приблизно одновимірним дискретним аналогом дискримінантного аналізу Фішера. Метод Оцу також безпосередньо пов'язаний з [en].
Розширення вихідного методу до багаторівневого порогового значення називається багатоточковим методом Оцу.
Метод
У методі Оцу ми вичерпно шукаємо поріг, що мінімізує дисперсію всередині класу, яка визначається як зважена сума дисперсій двох класів:
Вага та ймовірності двох класів, розділені порогом і та — відхилення цих двох класів.
Клас ймовірностей обчислюється з гістограм:
Оцу показує, що мінімізація дисперсії всередині класу збігається з максимізацією міжкласової дисперсії:
що виражається в термінах ймовірностей класу та класу значень .
коли клас означає:
Наступні співвідношення можна легко перевірити:
Ймовірності класу і засоби класу можуть бути обчислені ітеративно. Ця ідея дає ефективний алгоритм.
Алгоритм
- Обчисліть гістограму та ймовірність кожного рівня інтенсивності
- Установіть початкові та
- Пройдіть усі можливі порогові значення максимальна інтенсивність
- Оновіть та
- Обчисліть
- Бажаний поріг відповідає максимуму
MATLAB реалізація
histogramCounts — це 256-елементна гістограма зображення в градаціях сірого, різних рівнях сірого (типові для 8-бітних зображень). Рівень — це поріг зображення.
function level = otsu(histogramCounts) total = sum(histogramCounts); % '''total''' is the number of pixels in the given image. %% OTSU automatic thresholding method sumB = 0; wB = 0; maximum = 0.0; sum1 = dot( (0:255), histogramCounts); for ii=1:256 wB = wB + histogramCounts(ii); wF = total - wB; if (wB == 0 || wF == 0) continue; end sumB = sumB + (ii-1) * histogramCounts(ii); mF = (sum1 - sumB) / wF; between = wB * wF * ((sumB / wB) - mF) * ((sumB / wB) - mF); if ( between >= maximum ) level = ii; maximum = between; end end end
Matlab має вбудовані функції graythresh()
та multithresh()
в Image Processing Toolbox, які реалізуються за допомогою методу Оцу та методу Мульти-Оцу, відповідно.
Інший підхід з векторизованним методом (може бути легко перетворений в версію матриці масиву python для обробки GPU)
function [threshold_otsu] = Thresholding_Otsu( Image) %Intuition: %(1)pixels are divided into two groups %(2)pixels within each group are very similar to each other % Parameters: % t : threshold % r : pixel value ranging from 1 to 255 % q_L, q_H : the number of lower and higher group respectively % sigma : group variance % miu : group mean % Author: Lei Wang % Date : 22/09/2013 % References : Wikepedia, % for multi children Otsu method, please visit : https://drive.google.com/file/d/0BxbR2jt9XyxteF9fZ0NDQ0dKQkU/view?usp=sharing % This is my original work nbins = 256; counts = imhist(Image,nbins); p = counts / sum(counts); for t = 1 : nbins q_L = sum(p(1 : t)); q_H = sum(p(t + 1 : end)); miu_L = sum(p(1 : t) .* (1 : t)') / q_L; miu_H = sum(p(t + 1 : end) .* (t + 1 : nbins)') / q_H; sigma_b(t) = q_L * q_H * (miu_L - miu_H)^2; end [~,threshold_otsu] = max(sigma_b(:)); end
Реалізація має невелику надмірність обчислень. Але оскільки метод Оцу виконується швидко, реалізація прийнята і зрозуміла. Хоча в деяких середовищах, оскільки ми використовуємо форму векторизації, обчислення циклів може бути швидше. Цей метод може бути легко перетворений в многопороговий метод з мінімальними мітками для heap—children labels.
Python реалізація
import numpy as np from collections import Counter def Thresholding_Otsu(img): nbins = 256 pixel_counts = Counter(img.ravel()) counts = np.array([0 for x in range(256)]) for c in sorted(pixel_counts): counts[c] = pixel_counts[c] p = counts/sum(counts) sigma_b = np.zeros((256,1)) for t in range(nbins): q_L = sum(p[:t]) q_H = sum(p[t:]) if q_L ==0 or q_H == 0: continue miu_L = sum(np.dot(p[:t],np.transpose(np.matrix([i for i in range(t)]) )))/q_L miu_H = sum(np.dot(p[t:],np.transpose(np.matrix([i for i in range(t,256)]))))/q_H sigma_b[t] = q_L*q_H*(miu_L-miu_H)**2 return np.argmax(sigma_b)
JavaScript реалізація
Варіант 1
Вхідний аргумент total — це кількість пікселів в даному зображенні. Вхідний аргумент histogram являє собою 256-елементну гістограму зображення в градаціях сірого, різних рівнів сірого (типові для 8-бітних зображень). Ця функція виводить поріг для зображення.
function otsu(histogram, total) { var sum = 0; for (var i = 1; i < histogram.length + 1; ++i) //normally it will be 255 but sometimes we want to change step sum += i * histogram[i]; var sumB = 0; var wB = 0; var wF = 0; var mB; var mF; var max = 0.0; var between = 0.0; var threshold1 = 0.0; var threshold2 = 0.0; for (var i = 0; i < histogram.length; ++i) { wB += histogram[i]; if (wB == 0) continue; wF = total - wB; if (wF == 0) break; sumB += i * histogram[i]; mB = sumB / wB; mF = (sum - sumB) / wF; between = wB * wF * (mB - mF) * (mB - mF); if ( between >= max ) { threshold1 = i; if ( between > max ) { threshold2 = i; } max = between; } } return ( threshold1 + threshold2 ) / 2.0; }
Варіант 2
function otsu(histogram, pixelsNumber) { var sum = 0 , sumB = 0 , wB = 0 , wF = 0 , mB , mF , max = 0 , between , threshold = 0; for (var i = 0; i < 256; ++i) { wB += histogram[i]; if (wB == 0) continue; wF = pixelsNumber - wB; if (wF == 0) break; sumB += i * histogram[i]; mB = sumB / wB; mF = (sum - sumB) / wF; between = wB * wF * Math.pow(mB - mF, 2); if (between > max) { max = between; threshold = i; } } return threshold; } // To test: open any image in browser and run code in console var im = document.getElementsByTagName('img')[0] , cnv = document.createElement('canvas') , ctx = cnv.getContext('2d'); cnv.width = im.width; cnv.height = im.height; ctx.drawImage(im, 0, 0); var imData = ctx.getImageData(0, 0, cnv.width, cnv.height) , histogram = Array(256) , i , red , green , blue , gray; for (i = 0; i < 256; ++i) histogram[i] = 0; for (i = 0; i < imData.data.length; i += 4) { red = imData.data[i]; blue = imData.data[i + 1]; green = imData.data[i + 2]; // alpha = imData.data[i + 3]; // https://en.wikipedia.org/wiki/Grayscale gray = red * .2126 + green * .07152 + blue * .0722; histogram[Math.round(gray)] += 1; } var threshold = otsu(histogram, imData.data.length / 4); console.log("threshold = %s", threshold); for (i = 0; i < imData.data.length; i += 4) { imData.data[i] = imData.data[i + 1] = imData.data[i + 2] = imData.data[i] >= threshold ? 255 : 0; // opacity 255 = 100% imData.data[i + 3] = 255; } ctx.putImageData(imData, 0, 0); document.body.appendChild(cnv); console.log("finished");
Result.
Обмеження
Метод Оцу демонструє відносно хорошу продуктивність, якщо припустити, що гістограма має бімодальний розподіл і передбачає наявність глибокої і гострої долини між двома піками. Але якщо площа об'єкта мала в порівнянні з фоновою областю, гістограма більше не має бімодального розподілу. І якщо дисперсія об'єкта та інтенсивність фону великі в порівнянні з середньою різницею, або зображення сильно пошкоджено адитивним шумом, гостра долина гістограми рівня сірого погіршується. Тоді можливий неправильний поріг, визначений методом Оцу, призводить до помилки сегментації. (Тут ми визначаємо розмір об'єкта як відношення площі об'єкта до всієї області зображення, а середня різниця — різниця середніх інтенсивностей об'єкта і фону)
Показано, що з результатів експериментів ефективність глобальних методів порога, включаючи метод Оцу, обмежена розміром невеликого об'єкта, малої середньої різниці, великими дисперсіями об'єкта та інтенсивністю фону, великою кількістю доданого шуму і т. д.
Поліпшення
Існує безліч поліпшень, спрямованих на різні обмеження методу Оцу. Один відомий і ефективний спосіб відомий як двовимірний метод Оцу. У цьому підході вивчається значення рівня сірого для кожного пікселя, а також середнє значення його безпосередній околиці, так що результати бінаризації значно поліпшуються, особливо для зображень, спотворених шумом.
На кожному пікселі обчислюється середнє значення сірого рівня околиці. Нехай сірий рівень даного зображення буде розділений на значення та середній рівень сірого також буде розділений на ті ж самі значення . Потім формується пара: рівень сірого пікселя і середнє значення околиці. Кожна пара належить двовимірному скриньки. Загальна кількість ящиків, очевидно, . Загальна кількість входжень (частота), , пари поділеній на загальну кількість пікселів на зображенні , визначає спільну функцію ймовірності ймовірності в двовимірної гістограмі:
Двомірний метод Оцу буде розроблений на основі двовимірної гістограми наступним чином.
Ймовірності двох класів можна позначити як:
Інтенсивність означає вектори значень двох класів і загальної середньої вектора, які можуть бути виражені таким чином:
У більшості випадків ймовірність недіагональної оцінки буде незначною, тому легко перевірити:
Міжкласова дискретна матриця визначається як
Слід дискретної матриці може бути виражений як
де
Подібно одновимірному методу Оцу, оптимальний поріг виходить шляхом максимізації .
Алгоритм
і отримуються ітеративно, що дуже схоже на одновимірний Метод Оцу. Значення і змінюються доки ми не досягнемо максимуму , що є
max,s,t = 0; for ss: 0 to L-1 do for tt: 0 to L-1 do evaluate tr(S_b); if tr(S_b) > max max = tr(S,b); s = ss; t = tt; end if end for end for return s,t;
Matlab implementation
функції входу та виходу:
function threshold = 2D_otsu(hists, total) maximum = 0.0; threshold = 0; helperVec = 0:255; mu_t0 = sum(sum(repmat(helperVec',1,256).*hists)); mu_t1 = sum(sum(repmat(helperVec,256,1).*hists)); p_0 = zeros(256); mu_i = p_0; mu_j = p_0; for ii = 1:256 for jj = 1:256 if jj == 1 if ii == 1 p_0(1,1) = hists(1,1); else p_0(ii,1) = p_0(ii-1,1) + hists(ii,1); mu_i(ii,1) = mu_i(ii-1,1)+(ii-1)*hists(ii,1); mu_j(ii,1) = mu_j(ii-1,1); end else p_0(ii,jj) = p_0(ii,jj-1)+p_0(ii-1,jj)-p_0(ii-1,jj-1)+hists(ii,jj); mu_i(ii,jj) = mu_i(ii,jj-1)+mu_i(ii-1,jj)-mu_i(ii-1,jj-1)+(ii-1)*hists(ii,jj); mu_j(ii,jj) = mu_j(ii,jj-1)+mu_j(ii-1,jj)-mu_j(ii-1,jj-1)+(jj-1)*hists(ii,jj); end if (p_0(ii,jj) == 0) continue; end if (p_0(ii,jj) == total) break; end tr = ((mu_i(ii,jj)-p_0(ii,jj)*mu_t0)^2 + (mu_j(ii,jj)-p_0(ii,jj)*mu_t0)^2)/(p_0(ii,jj)*(1-p_0(ii,jj))); if ( tr >= maximum ) threshold = ii; maximum = tr; end end end end
Див. також
- Кластеризація зображення за фрагментами інтенсивності
- Implementation of Otsu's thresholding method as GIMP-plugin using Script-Fu (a Scheme-based language).
- Lecture notes on thresholding — covers the Otsu method.
- A plugin for ImageJ using Otsu's method to do the threshold.
- A full explanation of Otsu's method with a working example and Java implementation.
- Implementation of Otsu's method in
- Otsu Thresholding in C# A straightforward C# implementation with explanation.
- Otsu's method using MATLAB
Примітки
- M. Sezgin & B. Sankur (2004). Survey over image thresholding techniques and quantitative performance evaluation. Journal of Electronic Imaging. 13 (1): 146—165. doi:10.1117/1.1631315.
- Nobuyuki Otsu (1979). A threshold selection method from gray-level histograms. IEEE Trans. Sys., Man., Cyber. 9 (1): 62—66. doi:10.1109/TSMC.1979.4310076.
- Ping-Sung Liao and Tse-Sheng Chen and Pau-Choo Chung (2001). A Fast Algorithm for Multilevel Thresholding. J. Inf. Sci. Eng. 17 (5): 713—727.
- Kittler, Josef & Illingworth, John (1985). On threshold selection using clustering criteria. Systems, Man and Cybernetics, IEEE Transactions on. SMC-15 (5): 652—655. doi:10.1109/tsmc.1985.6313443.
- Lee, Sang Uk and Chung, Seok Yoon and Park, Rae Hong (1990). A comparative performance study of several global thresholding techniques for segmentation. Computer Vision, Graphics, and Image Processing. 52 (2): 171—190. doi:10.1016/0734-189x(90)90053-x.
- Vala, HJ & Baxi, Astha (2013). A review on Otsu image segmentation algorithm. International Journal of Advanced Research in Computer Engineering \& Technology (IJARCET). 2 (2): 387.
- Jianzhuang, Liu and Wenqing, Li and Yupeng, Tian (1991). Automatic thresholding of gray-level pictures using two-dimension Otsu method. Circuits and Systems, 1991. Conference Proceedings, China., 1991 International Conference on: 325—327.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U komp yuternomu bachenni ta obrobci zobrazhen metod Ocu nazvanij na chest en 大津展之 Ōtsu Nobuyuki ye metodom zasnovanim na klasterizaciyi dlya avtomatichnogo obchislennya porogovogo zobrazhennya abo zvedennya sirogo zobrazhennya do binarnogo zobrazhennya Algoritm peredbachaye sho zobrazhennya mistit dva klasi pikseliv nastupnoyi bi modalnoyi gistogrami pikseli perednogo planu i pikseli tla potim obchislyuyetsya optimalnij porig sho rozdilyaye dva klasi tak sho yih kombinovanij diapazon dispersiya klastera ye minimalnoyu abo rivnocinnoyu tomu sho suma poparnih kvadratichnih vidstanej postijna tak sho yih mizhklasterna dispersiya ye maksimalnoyu Otzhe metod Ocu ye priblizno odnovimirnim diskretnim analogom diskriminantnogo analizu Fishera Metod Ocu takozh bezposeredno pov yazanij z en Granichnij priklad zobrazhennya z vikoristannyam algoritmu Ocu Originalne zobrazhennya Rozshirennya vihidnogo metodu do bagatorivnevogo porogovogo znachennya nazivayetsya bagatotochkovim metodom Ocu MetodU metodi Ocu mi vicherpno shukayemo porig sho minimizuye dispersiyu vseredini klasu yaka viznachayetsya yak zvazhena suma dispersij dvoh klasiv s w 2 t w 0 t s 0 2 t w 1 t s 1 2 t displaystyle sigma w 2 t omega 0 t sigma 0 2 t omega 1 t sigma 1 2 t Vaga w 0 displaystyle omega 0 ta w 1 displaystyle omega 1 jmovirnosti dvoh klasiv rozdileni porogom t displaystyle t i s 0 2 displaystyle sigma 0 2 ta s 1 2 displaystyle sigma 1 2 vidhilennya cih dvoh klasiv Klas jmovirnostej w 0 1 t displaystyle omega 0 1 t obchislyuyetsya z L displaystyle L gistogram w 0 t i 0 t 1 p i w 1 t i t L 1 p i displaystyle begin aligned omega 0 t amp sum i 0 t 1 p i 4pt omega 1 t amp sum i t L 1 p i end aligned Ocu pokazuye sho minimizaciya dispersiyi vseredini klasu zbigayetsya z maksimizaciyeyu mizhklasovoyi dispersiyi s b 2 t s 2 s w 2 t w 0 m 0 m T 2 w 1 m 1 m T 2 w 0 t w 1 t m 0 t m 1 t 2 displaystyle begin aligned sigma b 2 t amp sigma 2 sigma w 2 t omega 0 mu 0 mu T 2 omega 1 mu 1 mu T 2 amp omega 0 t omega 1 t left mu 0 t mu 1 t right 2 end aligned sho virazhayetsya v terminah jmovirnostej klasu w displaystyle omega ta klasu znachen m displaystyle mu koli klas m 0 1 T t displaystyle mu 0 1 T t oznachaye m 0 t i 0 t 1 i p i w 0 m 1 t i t L 1 i p i w 1 m T i 0 L 1 i p i displaystyle begin aligned mu 0 t amp sum i 0 t 1 i frac p i omega 0 4pt mu 1 t amp sum i t L 1 i frac p i omega 1 mu T amp sum i 0 L 1 ip i end aligned Nastupni spivvidnoshennya mozhna legko pereviriti w 0 m 0 w 1 m 1 m T w 0 w 1 1 displaystyle begin aligned omega 0 mu 0 omega 1 mu 1 amp mu T omega 0 omega 1 amp 1 end aligned Jmovirnosti klasu i zasobi klasu mozhut buti obchisleni iterativno Cya ideya daye efektivnij algoritm Algoritm Obchislit gistogramu ta jmovirnist kozhnogo rivnya intensivnosti Ustanovit pochatkovi w i 0 displaystyle omega i 0 ta m i 0 displaystyle mu i 0 Projdit usi mozhlivi porogovi znachennya t 1 displaystyle t 1 ldots maksimalna intensivnist Onovit w i displaystyle omega i ta m i displaystyle mu i Obchislit s b 2 t displaystyle sigma b 2 t Bazhanij porig vidpovidaye maksimumu s b 2 t displaystyle sigma b 2 t MATLAB realizaciya histogramCounts ce 256 elementna gistograma zobrazhennya v gradaciyah sirogo riznih rivnyah sirogo tipovi dlya 8 bitnih zobrazhen Riven ce porig zobrazhennya function level otsu histogramCounts total sum histogramCounts total is the number of pixels in the given image OTSU automatic thresholding method sumB 0 wB 0 maximum 0 0 sum1 dot 0 255 histogramCounts for ii 1 256 wB wB histogramCounts ii wF total wB if wB 0 wF 0 continue end sumB sumB ii 1 histogramCounts ii mF sum1 sumB wF between wB wF sumB wB mF sumB wB mF if between gt maximum level ii maximum between end end end Matlab maye vbudovani funkciyi graythresh ta multithresh v Image Processing Toolbox yaki realizuyutsya za dopomogoyu metodu Ocu ta metodu Multi Ocu vidpovidno Inshij pidhid z vektorizovannim metodom mozhe buti legko peretvorenij v versiyu matrici masivu python dlya obrobki GPU function threshold otsu Thresholding Otsu Image Intuition 1 pixels are divided into two groups 2 pixels within each group are very similar to each other Parameters t threshold r pixel value ranging from 1 to 255 q L q H the number of lower and higher group respectively sigma group variance miu group mean Author Lei Wang Date 22 09 2013 References Wikepedia for multi children Otsu method please visit https drive google com file d 0BxbR2jt9XyxteF9fZ0NDQ0dKQkU view usp sharing This is my original work nbins 256 counts imhist Image nbins p counts sum counts for t 1 nbins q L sum p 1 t q H sum p t 1 end miu L sum p 1 t 1 t q L miu H sum p t 1 end t 1 nbins q H sigma b t q L q H miu L miu H 2 end threshold otsu max sigma b end Realizaciya maye neveliku nadmirnist obchislen Ale oskilki metod Ocu vikonuyetsya shvidko realizaciya prijnyata i zrozumila Hocha v deyakih seredovishah oskilki mi vikoristovuyemo formu vektorizaciyi obchislennya cikliv mozhe buti shvidshe Cej metod mozhe buti legko peretvorenij v mnogoporogovij metod z minimalnimi mitkami dlya heap children labels Python realizaciya import numpy as np from collections import Counter def Thresholding Otsu img nbins 256 pixel counts Counter img ravel counts np array 0 for x in range 256 for c in sorted pixel counts counts c pixel counts c p counts sum counts sigma b np zeros 256 1 for t in range nbins q L sum p t q H sum p t if q L 0 or q H 0 continue miu L sum np dot p t np transpose np matrix i for i in range t q L miu H sum np dot p t np transpose np matrix i for i in range t 256 q H sigma b t q L q H miu L miu H 2 return np argmax sigma b JavaScript realizaciya Variant 1 Vhidnij argument total ce kilkist pikseliv v danomu zobrazhenni Vhidnij argument histogram yavlyaye soboyu 256 elementnu gistogramu zobrazhennya v gradaciyah sirogo riznih rivniv sirogo tipovi dlya 8 bitnih zobrazhen Cya funkciya vivodit porig dlya zobrazhennya function otsu histogram total var sum 0 for var i 1 i lt histogram length 1 i normally it will be 255 but sometimes we want to change step sum i histogram i var sumB 0 var wB 0 var wF 0 var mB var mF var max 0 0 var between 0 0 var threshold1 0 0 var threshold2 0 0 for var i 0 i lt histogram length i wB histogram i if wB 0 continue wF total wB if wF 0 break sumB i histogram i mB sumB wB mF sum sumB wF between wB wF mB mF mB mF if between gt max threshold1 i if between gt max threshold2 i max between return threshold1 threshold2 2 0 Variant 2 function otsu histogram pixelsNumber var sum 0 sumB 0 wB 0 wF 0 mB mF max 0 between threshold 0 for var i 0 i lt 256 i wB histogram i if wB 0 continue wF pixelsNumber wB if wF 0 break sumB i histogram i mB sumB wB mF sum sumB wF between wB wF Math pow mB mF 2 if between gt max max between threshold i return threshold To test open any image in browser and run code in console var im document getElementsByTagName img 0 cnv document createElement canvas ctx cnv getContext 2d cnv width im width cnv height im height ctx drawImage im 0 0 var imData ctx getImageData 0 0 cnv width cnv height histogram Array 256 i red green blue gray for i 0 i lt 256 i histogram i 0 for i 0 i lt imData data length i 4 red imData data i blue imData data i 1 green imData data i 2 alpha imData data i 3 https en wikipedia org wiki Grayscale gray red 2126 green 07152 blue 0722 histogram Math round gray 1 var threshold otsu histogram imData data length 4 console log threshold s threshold for i 0 i lt imData data length i 4 imData data i imData data i 1 imData data i 2 imData data i gt threshold 255 0 opacity 255 100 imData data i 3 255 ctx putImageData imData 0 0 document body appendChild cnv console log finished Result ObmezhennyaMetod Ocu demonstruye vidnosno horoshu produktivnist yaksho pripustiti sho gistograma maye bimodalnij rozpodil i peredbachaye nayavnist glibokoyi i gostroyi dolini mizh dvoma pikami Ale yaksho plosha ob yekta mala v porivnyanni z fonovoyu oblastyu gistograma bilshe ne maye bimodalnogo rozpodilu I yaksho dispersiya ob yekta ta intensivnist fonu veliki v porivnyanni z serednoyu rizniceyu abo zobrazhennya silno poshkodzheno aditivnim shumom gostra dolina gistogrami rivnya sirogo pogirshuyetsya Todi mozhlivij nepravilnij porig viznachenij metodom Ocu prizvodit do pomilki segmentaciyi Tut mi viznachayemo rozmir ob yekta yak vidnoshennya ploshi ob yekta do vsiyeyi oblasti zobrazhennya a serednya riznicya riznicya serednih intensivnostej ob yekta i fonu Pokazano sho z rezultativ eksperimentiv efektivnist globalnih metodiv poroga vklyuchayuchi metod Ocu obmezhena rozmirom nevelikogo ob yekta maloyi serednoyi riznici velikimi dispersiyami ob yekta ta intensivnistyu fonu velikoyu kilkistyu dodanogo shumu i t d PolipshennyaIsnuye bezlich polipshen spryamovanih na rizni obmezhennya metodu Ocu Odin vidomij i efektivnij sposib vidomij yak dvovimirnij metod Ocu U comu pidhodi vivchayetsya znachennya rivnya sirogo dlya kozhnogo pikselya a takozh serednye znachennya jogo bezposerednij okolici tak sho rezultati binarizaciyi znachno polipshuyutsya osoblivo dlya zobrazhen spotvorenih shumom Na kozhnomu pikseli obchislyuyetsya serednye znachennya sirogo rivnya okolici Nehaj sirij riven danogo zobrazhennya bude rozdilenij na znachennya L displaystyle L ta serednij riven sirogo takozh bude rozdilenij na ti zh sami znachennya L displaystyle L Potim formuyetsya para riven sirogo pikselya i serednye znachennya okolici Kozhna para nalezhit dvovimirnomu skrinki Zagalna kilkist yashikiv ochevidno L L displaystyle L times L Zagalna kilkist vhodzhen chastota f i j displaystyle f ij pari i j displaystyle i j podilenij na zagalnu kilkist pikseliv na zobrazhenni N displaystyle N viznachaye spilnu funkciyu jmovirnosti jmovirnosti v dvovimirnoyi gistogrami P i j f i j N i 0 L 1 j 0 L 1 P i j 1 displaystyle P ij frac f ij N qquad sum i 0 L 1 sum j 0 L 1 P ij 1 Dvomirnij metod Ocu bude rozroblenij na osnovi dvovimirnoyi gistogrami nastupnim chinom Jmovirnosti dvoh klasiv mozhna poznachiti yak w 0 i 0 s 1 j 0 t 1 P i j w 1 i s L 1 j t L 1 P i j displaystyle begin aligned omega 0 amp sum i 0 s 1 sum j 0 t 1 P ij omega 1 amp sum i s L 1 sum j t L 1 P ij end aligned Intensivnist oznachaye vektori znachen dvoh klasiv i zagalnoyi serednoyi vektora yaki mozhut buti virazheni takim chinom m 0 m 0 i m 0 j T i 0 s 1 j 0 t 1 i P i j w 0 i 0 s 1 j 0 t 1 j P i j w 0 T m 1 m 1 i m 1 j T i s L 1 j t L 1 i P i j w 1 i s L 1 j t L 1 j P i j w 1 T m T m T i m T j T i 0 L 1 j 0 L 1 i P i j i 0 L 1 j 0 L 1 j P i j T displaystyle begin aligned mu 0 amp mu 0i mu 0j T left sum i 0 s 1 sum j 0 t 1 i frac P ij omega 0 sum i 0 s 1 sum j 0 t 1 j frac P ij omega 0 right T mu 1 amp mu 1i mu 1j T left sum i s L 1 sum j t L 1 i frac P ij omega 1 sum i s L 1 sum j t L 1 j frac P ij omega 1 right T mu T amp mu Ti mu Tj T left sum i 0 L 1 sum j 0 L 1 iP ij sum i 0 L 1 sum j 0 L 1 jP ij right T end aligned U bilshosti vipadkiv jmovirnist nediagonalnoyi ocinki bude neznachnoyu tomu legko pereviriti w 0 w 1 1 displaystyle omega 0 omega 1 cong 1 w 0 m 0 w 1 m 1 m T displaystyle omega 0 mu 0 omega 1 mu 1 cong mu T Mizhklasova diskretna matricya viznachayetsya yak S b k 0 1 w k m k m T m k m T T displaystyle S b sum k 0 1 omega k mu k mu T mu k mu T T Slid diskretnoyi matrici mozhe buti virazhenij yak tr S b w 0 m 0 i m T i 2 m 0 j m T j 2 w 1 m 1 i m T i 2 m 1 j m T j 2 m T i w 0 m i 2 m T j w 0 m j 2 w 0 1 w 0 displaystyle begin aligned amp operatorname tr S b 4pt amp omega 0 mu 0i mu Ti 2 mu 0j mu Tj 2 omega 1 mu 1i mu Ti 2 mu 1j mu Tj 2 4pt amp frac mu Ti omega 0 mu i 2 mu Tj omega 0 mu j 2 omega 0 1 omega 0 end aligned de m i i 0 s j 0 t i P i j displaystyle mu i sum i 0 s sum j 0 t iP ij m j i 0 s j 0 t j P i j displaystyle mu j sum i 0 s sum j 0 t jP ij Podibno odnovimirnomu metodu Ocu optimalnij porig s t displaystyle s t vihodit shlyahom maksimizaciyi tr S b displaystyle operatorname tr S b Algoritm s displaystyle s i t displaystyle t otrimuyutsya iterativno sho duzhe shozhe na odnovimirnij Metod Ocu Znachennya s displaystyle s i t displaystyle t zminyuyutsya doki mi ne dosyagnemo maksimumu tr S b displaystyle operatorname tr S b sho ye max s t 0 for ss 0 to L 1 do for tt 0 to L 1 do evaluate tr S b if tr S b gt max max tr S b s ss t tt end if end for end for return s t Matlab implementation funkciyi vhodu ta vihodu function threshold 2D otsu hists total maximum 0 0 threshold 0 helperVec 0 255 mu t0 sum sum repmat helperVec 1 256 hists mu t1 sum sum repmat helperVec 256 1 hists p 0 zeros 256 mu i p 0 mu j p 0 for ii 1 256 for jj 1 256 if jj 1 if ii 1 p 0 1 1 hists 1 1 else p 0 ii 1 p 0 ii 1 1 hists ii 1 mu i ii 1 mu i ii 1 1 ii 1 hists ii 1 mu j ii 1 mu j ii 1 1 end else p 0 ii jj p 0 ii jj 1 p 0 ii 1 jj p 0 ii 1 jj 1 hists ii jj mu i ii jj mu i ii jj 1 mu i ii 1 jj mu i ii 1 jj 1 ii 1 hists ii jj mu j ii jj mu j ii jj 1 mu j ii 1 jj mu j ii 1 jj 1 jj 1 hists ii jj end if p 0 ii jj 0 continue end if p 0 ii jj total break end tr mu i ii jj p 0 ii jj mu t0 2 mu j ii jj p 0 ii jj mu t0 2 p 0 ii jj 1 p 0 ii jj if tr gt maximum threshold ii maximum tr end end end endDiv takozhKlasterizaciya zobrazhennya za fragmentami intensivnosti Implementation of Otsu s thresholding method as GIMP plugin using Script Fu a Scheme based language Lecture notes on thresholding covers the Otsu method A plugin for ImageJ using Otsu s method to do the threshold A full explanation of Otsu s method with a working example and Java implementation Implementation of Otsu s method in Otsu Thresholding in C A straightforward C implementation with explanation Otsu s method using MATLABPrimitkiM Sezgin amp B Sankur 2004 Survey over image thresholding techniques and quantitative performance evaluation Journal of Electronic Imaging 13 1 146 165 doi 10 1117 1 1631315 Nobuyuki Otsu 1979 A threshold selection method from gray level histograms IEEE Trans Sys Man Cyber 9 1 62 66 doi 10 1109 TSMC 1979 4310076 Ping Sung Liao and Tse Sheng Chen and Pau Choo Chung 2001 A Fast Algorithm for Multilevel Thresholding J Inf Sci Eng 17 5 713 727 Kittler Josef amp Illingworth John 1985 On threshold selection using clustering criteria Systems Man and Cybernetics IEEE Transactions on SMC 15 5 652 655 doi 10 1109 tsmc 1985 6313443 Lee Sang Uk and Chung Seok Yoon and Park Rae Hong 1990 A comparative performance study of several global thresholding techniques for segmentation Computer Vision Graphics and Image Processing 52 2 171 190 doi 10 1016 0734 189x 90 90053 x Vala HJ amp Baxi Astha 2013 A review on Otsu image segmentation algorithm International Journal of Advanced Research in Computer Engineering amp Technology IJARCET 2 2 387 Jianzhuang Liu and Wenqing Li and Yupeng Tian 1991 Automatic thresholding of gray level pictures using two dimension Otsu method Circuits and Systems 1991 Conference Proceedings China 1991 International Conference on 325 327