Маска изображения со статическим порогом в Matlab
Мне нужно бинаризировать изображение в Matlab со статическим порогом 10% от средней интенсивности. Я нахожу среднюю интенсивность, используя mean2(Image)
и это возвращает среднее значение, скажем, 15.10
в одном из изображений. Таким образом, мой средний порог 1.51
,im2bw(image,level)
принимает порог между 0 и 1. Как преобразовать в двоичную форму мое изображение в этом случае в Matlab?
4 ответа
Вы можете преобразовать изображение в двоичную форму с помощью простого логического утверждения. Для полноты я также добавил определение порога.
threshold = mean(Image(:));
binaryMask = Image > 0.1 * threshold;
1) вы можете сначала преобразовать исходное изображение в двойной формат, используя im2double()
, Тогда все значения пикселей будут между 0 и 1. Тогда вы можете использовать im2bw(im,level)
,
2) Если вы не хотите конвертировать изображение в двойное, то вы можете сделать это следующим образом. Допустим, порог составляет 10 % от среднего значения, скажем, threshold = 1.51
, Давайте обозначим изображение у вас есть im
, затем im(im<threshold) = 0; im(im>=threshold)=1
, После этих двух операций im
станет бинарным изображением.
Вам нужно нормализовать результат среднего значения по сравнению с максимальной интенсивностью изображения, если вы хотите использовать im2bw
(другие упомянутые решения, конечно, правильны и работают):
ImageN=Image./max(Image(:))
t = mean2(ImageN) * 0.1 % Find your threshold value
im2bw(Image,t)
Допустим, ваше изображение является матрицей img
Вы можете сделать следующее:
t = mean2(img) * 0.1 % Find your threshold value
img(img < t) = 0 % Set everything below the treshold value to 0
img(img ̃= 0) = 1 % Set the rest to 1