如何阈值R中图像的强度值?

时间:2014-03-19 13:35:30

标签: r image image-processing threshold

我在R中编写了一个函数,它读取文本文件并使用该文件中每个协调员的坐标信息和强度值生成颜色映射。

现在,我想对强度应用特定阈值,使得低于特定阈值的强度值被抑制(或者是黑色),并且高于阈值的强度以定义的颜色方案表示。我基本上想要高强度的图像上的高亮区域。

在这种情况下我还有另一个问题:我可以定义一个百分比,而不是阈值的具体值吗?因为,对于每个图像,我都有不同的强度值,因此必须应用不同的阈值。

我附上了我正在使用的图片。 enter image description here

以下是三列数据的示例(xCoordinate,yCoordinate,intensity values)

0 0 4.169080e+000
1 0 6.391669e+000
2 0 6.391669e+000
.
.
.
511 0 9.922547e+000
0 1 5.268026e+000
1 1 5.268026e+000
.
.
.
511 511 9.922547e+000

并且,为了生成绘图,我从文件中读取所有数据并将其传递给生成颜色映射(spplot)的函数。这是功能:

generatePlot <- function (data, plotName) {
  rv <- raster(nrows=data$xPixels, ncols=data$xPixels)
  rv1 <- raster(matrix(data$rawData$V3, nrow = data$xPixels, byrow = T), xmn=0, ymn=0,     xmx=1, ymx=1)
plotData <- spplot(rv1, scales = list(draw = TRUE), col.regions=rainbow(100, start = 1/6, end = 1), main=plotName)

这是原始图片: enter image description here

这是阈值图像: enter image description here

1 个答案:

答案 0 :(得分:2)

关键是将NA分配给低于阈值的所有值:

library(sp)
library(raster)

# create data
x = 1:511
y = 1:511
z = runif(n=511*511, min=0, max=10)

# turn into matrix
m = matrix(z, nrow=length(x), ncol=length(y))

# your function
generatePlot <- function (data, plotName) {

  # which values are below 0.5*max?
  below = which(data<0.5*max(data,na.rm=T))

  # change these values to NA
  data[below] <- NA

  # make a raster of the matrix
  rv1 <- raster(data)

  # create the plot
  plotData <- spplot(rv1, scales = list(draw = TRUE), col.regions=rainbow(100, start = 1/6, end = 1), main=plotName)

  return(plotData)
}

plotData = generatePlot(m,'nice plot')
print(plotData)