В Matlab, я хочу портировать изображение в градациях серого, чтобы преобразовать его в черно-белое изображение:
for k=1:Y for i=1:X if gray(i,k)>T gray(i,k)=1; else gray(i,k)=0; end end end
Как вы думаете, какое должно быть значение T?
На вашем месте я бы использовал медиану:
gray=double(gray>median(gray(:)))
PS: вы должны использовать этот более эффективный код в целом:
gray=double(gray>T)
Ответ Дасти на использование метода Оцу встроен в MATLAB.
Следующий код взят со страницы MATLAB о функции graythresh (которая реализует метод Оцу).
I = imread('coins.png'); level = graythresh(I); BW = im2bw(I,level); imshow(BW)
Встроенная функция im2bw принимает уровень в качестве одного из параметров. Таким образом, вместо использования для циклов мы можем использовать его для преобразования. Уровень по умолчанию - 0,5.
От: http://www.mathworks.com/help/images/ref/im2bw.html
im2bw
Преобразование изображения в двоичное изображение на основе порога
Синтаксис
BW = im2bw(I, level) BW = im2bw(X, map, level) BW = im2bw(RGB, level)