Метод ковариограммы для двоичного изображения в R

Я пытаюсь получить график ковариограммы, чтобы вычислить некоторые значения по нему. Вот работа, которая сделана раньше; Количественный анализ полосовых конструкций в двухфазных сталях

Просто прочитайте 2. страницу, этого будет достаточно, чтобы понять метод.

Существует изображение для иллюстрации метода в этом документе следующим образом: Covariogram

Вы можете видеть, что авторы использовали изображение в примере на сюжете, затем они получили этот сюжет.

Вот изображение, которое я использую, как двоичное изображение: Мой образ

Я просто хочу получить этот сюжет, используя мое изображение.

Код:

setwd(".../Project/R/Workspace/Task1")
library("EBImage", lib.loc="~/R/win-library/3.2")
img <- readImage(".../Project/Beispielbilder/example.jpg")
display(img,  title='Image')
M <- img_ithr
plot(cov(M),xlim=c(0,1), ylim=c(0,300))

Спасибо за вашу помощь и время, люди.

1 ответ

Решение

Основываясь на вашем примере файла и описании статьи, я пришел к следующему.

library("EBImage")

img <- readImage("https://stackru.com/images/9ddb8e3eb7ee1be6b5e0be0f0ee3cbf9ab792774.jpg")

## discard color channels by collapsing to grayscale, and binarize
bin <- channel(img, "gray") > .5

## function calculating the overlap between the original structure
## and the structure shifted by a vector v
C <- function(img, v) {
  sum(img & translate(img, v)) / prod(dim(img)[1:2]-v)
}

h <- 1:300

## horizontal
C_h <- sapply(h, function(h) C(bin, c(h, 0)))

## vertical
C_v <- sapply(h, function(h) C(bin, c(0, h)))

matplot(h, cbind(C_h, C_v), xlim = range(h), ylim = range(C_h, C_v),
         ylab = "C", col = c("red", "blue"), type = "l", lty = 1)

введите описание изображения здесь

Ковариация измеряется отдельно в двух перпендикулярных направлениях. Я не уверен, однако, как направления β были учтены в сюжете из статьи.

Другие вопросы по тегам