2014-03-19 58 views
-1

我已經在R中編寫了一個函數,它讀取一個文本文件並使用該文件中每個協調元的座標信息和強度值生成一個顏色映射。如何爲R中圖像的閾值強度值?

現在,我想對強度應用一個特定的閾值,使得低於特定閾值的強度值被抑制(或呈黑色),並且閾值以上的強度以所定義的顏色方案表示。我基本上想要高強度的圖像高亮區域。

在這種情況下,我也有另一個問題:我可以定義一個百分比而不是具體的閾值:因爲對於每個圖像,我都有不同的強度值,因此必須應用不同的閾值。

我附上了我正在使用的圖像。 enter image description here

這裏是數據的有三列(x座標,y座標,強度值)

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

+2

您使用哪個函數來繪製圖像?適應'zlim'是否符合你的要求,例如'image(X,zlim = c(20,110))'?您還可以將低於您的閾值的值設置爲「NA」以在圖中將其抑制。 – koekenbakker

+0

我正在使用spplot(rv1Correctedals,zlim = c(40,110)),main =「ALS」)。我嘗試使用zlim,但它給出了以下錯誤:未使用的參數(zlim = c(40,110)) – novicegeek

+1

'my_image [my_image

回答

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) 
+0

我試過你的建議,使用my_image [my_image novicegeek

+0

用數據集樣本更新您的問題是個好主意。可能你的數據是列表而不是矩陣格式。檢查'?as.matrix'或搜索谷歌尋找錯誤消息的解決方案。百分比當然可以定義,例如'threshold = 0.5 * max(my_image,na.rm = T)'。 – koekenbakker

+0

我已經更新了示例數據以及我創建的用於生成spplot的函數。我試圖實現百分比閾值,但它不適用於我的數據,或者我在函數中做錯了什麼。 – novicegeek