Автоопределение порога на растровом объекте R - PullRequest
0 голосов
/ 30 июня 2018

Существует ли алгоритм авто-порогового значения, такой как 'Otsu', для растрового объекта R. Я попытался использовать пакет «authothresholder», однако он неэффективен, поскольку он работает с матрицей и не работает с 32-битными файлами TIF. Я пытаюсь преобразовать изображение NDWI в двоичный слой.

1 Ответ

0 голосов
/ 30 июня 2018

Это реализовано в пакете EBImage, доступном от Bioconductor. Вот пример использования:

library(EBImage)
img <- readImage(system.file("images", "sample.png", package = "EBImage"))
thr <- img > otsu(img)
display(img)
display(thr)

Реализация по существу следующая (взято из определения функции EBImage::otsu, т.е. не моей работы), поэтому вы должны иметь возможность адаптировать следующее для любого набора инструментов анализа изображений, который вы используете:

img  # assuming img is a numeric matrix or vector

range = c(0, 1)  # assuming values in the matrix range from 0 to 1
levels = 256L
breaks = seq(range[1], range[2], length.out = levels + 1)

h = hist.default(img, breaks = breaks, plot = FALSE)
counts = as.double(h$counts)
mids = as.double(h$mids)
len = length(counts)
w1 = cumsum(counts)
w2 = w1[len] + counts - w1
cm = counts * mids
m1 = cumsum(cm)
m2 = m1[len] + cm - m1
var = w1 * w2 * (m2/w2 - m1/w1)^2
maxi = which(var == max(var, na.rm = TRUE))
(mids[maxi[1]] + mids[maxi[length(maxi)]])/2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...