我在R中编写了一个函数,它读取文本文件并使用该文件中每个协调员的坐标信息和强度值生成颜色映射。
现在,我想对强度应用特定阈值,使得低于特定阈值的强度值被抑制(或者是黑色),并且高于阈值的强度以定义的颜色方案表示。我基本上想要高强度的图像上的高亮区域。
在这种情况下我还有另一个问题:我可以定义一个百分比,而不是阈值的具体值吗?因为,对于每个图像,我都有不同的强度值,因此必须应用不同的阈值。
我附上了我正在使用的图片。
以下是三列数据的示例(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)
这是原始图片:
这是阈值图像:
答案 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)