Использование Multi Spec и R для пакетного анализа изображений

Можно ли использовать R для запуска пакета изображений через Multi Spec (или любую другую программу, кроме ImageJ) вместо анализа одного изображения?

И если да, то как?

Я приложил изображения именно того, что ищу, используя следующие ссылки: "http://figshare.com/s/f81b92ea474f11e5b78d06ec4bbcf141" "http://figshare.com/s/463ec4ce475011e5909106ec1b8d1f61f61

Изображение «Редактировать» является копией «ms485_a7c5,c3aR 40x gm 1.tif» с выделенными ячейками того, что я ищу.

Черные прямоугольники, окружающие синие круги, — это один из наборов данных, которые я ищу, в частности, их количество на изображении, а также процент площади изображения, которую они покрывают. Красные поля, окружающие объединенные синие и коричневые области, также являются тем, что я специально ищу с теми же значениями, которые необходимы, как указано выше. Наконец, коричневые области изображения — это то, что я ищу, но только для % области, покрытой изображением.

Я могу выполнить анализ 1 изображения в Multi-Spec, но мне нужно, чтобы это было перенесено на более чем 1000 изображений, и я не могу этого сделать, поскольку я не знаком с R или другими программами кодирования.

заранее спасибо


person Lewis    schedule 18.08.2015    source источник
comment
Нет никаких причин, по которым вы не могли бы предположить, что можете делать то, что вам нужно, из командной строки. Но использование R исключительно в качестве инструмента пакетной обработки, вероятно, принесет больше проблем, чем пользы. Какую задачу обработки изображений вы пытаетесь решить? Я думаю, вам нужно быть более точным в процессе, иначе вы не получите никаких конкретных предложений по альтернативам или хорошим подходам.   -  person Forrest R. Stevens    schedule 18.08.2015
comment
Я смотрю на изображение клеток, а не на спутниковое изображение, но оно основано на тех же принципах. У меня есть более 1000 изображений с одними и теми же 4 цветами (коричневый, синий, белый и коричневый, перекрывающие синий), и я пытаюсь посмотреть на площадь поверхности, которую покрывают эти клетки. Я обнаружил, что Multi Spec имеет гораздо лучшие преимущества по сравнению с ImageJ, поскольку я хотел бы использовать одну и ту же длину волны цвета в каждом новом изображении. Если требуется дополнительная информация, пожалуйста, прокомментируйте. Спасибо   -  person Lewis    schedule 18.08.2015
comment
Насколько велики эти изображения и в каком они формате? Являются ли цвета фиксированными / классифицированными или вы имеете дело с изображениями RGB? Я пытаюсь понять, нужен ли вам внешний инструмент или вы можете напрямую использовать пакет raster...   -  person Forrest R. Stevens    schedule 18.08.2015
comment
@ForrestR.Stevens Изображения имеют размер примерно 15 МБ и размеры 2600x2060 пикселей. Цвета также фиксированы. Есть ли способ загрузить сюда изображение и интересующие меня свойства (цвета)? Спасибо   -  person Lewis    schedule 19.08.2015
comment
Вы можете добавить их на figshare или связать их с Dropbox и т. д. Но лучше всего будет смоделировать похожие данные. Похоже, то, что вы хотите, может быть выполнено в нескольких строках кода в самом R. По сути, вы просто хотите подсчитать количество пикселей по цвету?   -  person Forrest R. Stevens    schedule 20.08.2015
comment
Спасибо, я добавил несколько изображений на figshare (figshare.com/account/my_data#session=92887399).), чтобы дать вам представление о том, что я ищу. Изображение редактирования представляет собой копию ms485_a7c5,c3aR 40x gm 1.tif с выделенными прямоугольниками того, что я ищу. Черные прямоугольники, окружающие синие круги, — это один из наборов данных, которые я ищу, в частности, их количество на изображении, а также процент площади изображения, которую они покрывают. Красные поля, окружающие объединенные синие и коричневые области, также являются тем, что я специально ищу с теми же значениями, которые необходимы, как указано выше.   -  person Lewis    schedule 20.08.2015
comment
Наконец, коричневые области изображения — это то, что я ищу, но только для % области, покрытой изображением. Я могу выполнить анализ 1 изображения в Multi-Spec, но мне нужно, чтобы это было перенесено на более чем 1000 изображений, и я не могу этого сделать, поскольку я не знаком с R или другими программами кодирования. Чтобы ответить на ваш вопрос, количество пикселей по цвету, по сути, представляет собой % покрытой области, так что это было бы чрезвычайно полезно. Если ссылка не работает или нужна дополнительная информация, не стесняйтесь спрашивать. Спасибо @ForrestR.Stevens   -  person Lewis    schedule 20.08.2015
comment
Ссылка не работает, вы должны найти ссылку, которая ведет непосредственно к вашему опубликованному ресурсу, а не ссылку на сеанс. Кроме того, вы должны добавить эти данные и отредактировать исходный вопрос, чтобы люди, работающие над похожими проблемами, могли легко найти ваш вопрос через StackOverflow.   -  person Forrest R. Stevens    schedule 20.08.2015
comment
Спасибо за предложения @ForrestR.Stevens. Ссылки теперь находятся в области вопросов.   -  person Lewis    schedule 20.08.2015


Ответы (1)


Итак, я не знаю, как далеко это вас заведет, но обработка каждого изображения по одному должна быть выполнимой в пределах вашей памяти. Описанный подход является самым основным из пороговых значений, применяемых к вашим изображениям. Могут быть применены гораздо более изощренные подходы:

library(raster)

i <- brick("./data/ms485_a7c5_c3aR_40x_gm_1.tif")
names(i) <- c("r", "g", "b")

##  Plot image:
plotRGB(i)

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

##  Here you could use a more sophisticated classification method:
#k <- kmeans(i[], centers=4, iter.max = 100, nstart = 4)
#c <- raster(i)
#c[] <- c$cluster

##  Instead we'll just set some simple thresholds:
c1 <- (i$r < 170 & i$g < 140 & i$b > 150)*1  ## Blues
c2 <- (i$r > 150 & i$g > 150 & i$b > 150)*2  ## Lights
c3 <- (i$r < 170 & i$g < 150 & i$b < 140)*3  ## Darks

##  Plot the classified data so you see what you're summarizing below:
plot(c, add=T, legend=F, col=c(
  rgb(255, 255, 255, maxColorValue=255),
  rgb(100, 100, 180, maxColorValue=255),
  rgb(220, 220, 220, maxColorValue=255),
  rgb(120, 100, 90, maxColorValue=255)
))

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

##  And calculate your summary stats by class:

t <- table(c[])
names(t) <- c("Unclassified", "Blues", "Lights", "Darks")
t

##  Unclassified        Blues       Lights        Darks 
##        283887       220042      4475129       376942

##  Or we can calculate those cell counts as percentages of pixels:
t/ncell(c) * 100

##  Unclassified        Blues       Lights        Darks 
##      5.300355     4.108327    83.553566     7.037752 

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

##  To summarize distinct patches within your classified "Blues":
library(SDMTools)

##  Calculate stats, and count all patches for "Blues":
class_stats <- ClassStat(c1, cellsize=1, bkgd=0)
class_stats$n.patches

##  [1] 1858

##  Only count patches larger than 10 pixels:
image_clusters <- ConnCompLabel( c1 )
patch_stats <- PatchStat(image_clusters, cellsize=1)
sum(patch_stats[patch_stats$patchID>0,]$n.cell > 10)

##  [1] 462
person Forrest R. Stevens    schedule 20.08.2015