我想通過顯示網格中每個像素的交叉點數量來傳達2D空間中線條的濃度。我想像的是類似於密度圖的東西,但具有更直觀的單位。我被吸引到spatstat包及其線段類(psp)中,因爲它允許您通過它們的端點定義線段,並將整個線段包含在計算中。然而,我很努力地找到正確的功能組合來計算這些數字,並會很感激任何建議。如何在R中按像素計算線段出現次數?
如下例中50行所示,密度函數在(0,140)中生成值,pixellate函數計算每個像素的總長度,並取(0,0.04)中的值,as.mask生成二進制指示線是否穿過每個像素。我希望看到某個地方的比例尺取整數值,比如0..10。
require(spatstat)
set.seed(1234)
numLines = 50
# define line segments
L = psp(runif(numLines),runif(numLines),runif(numLines),runif(numLines), window=owin())
# image with 2-dimensional kernel density estimate
D = density.psp(L, sigma=0.03)
# image with total length of lines through each pixel
P = pixellate.psp(L)
# binary mask giving whether a line went through a pixel
B = as.mask.psp(L)
par(mfrow=c(2,2), mar=c(2,2,2,2))
plot(L, main="L")
plot(D, main="density.psp(L)")
plot(P, main="pixellate.psp(L)")
plot(B, main="as.mask.psp(L)")
pixellate.psp函數允許您有選擇地指定要在計算中使用的權重。我認爲試圖操縱這一點來規範化像素,使每個交叉點的像素數爲1,但是權重被唯一地應用於每條線(而不是針對線/像素對)。我還考慮過爲每一行計算一個二進制掩碼並添加結果,但似乎應該有一個更簡單的方法。我知道你可以沿着一條線對點進行採樣,然後按像素點數進行計數。但是,我擔心要正確地取樣,以便每個像素的每一行都有一個且僅有一個點。
在R中有直接的方法來做到這一點嗎?否則,這將是未來軟件包增強的適當建議嗎?用另一種語言如python或matlab更容易實現嗎?
上面的例子和我的測試一直在x86_64-w64-mingw32上使用spatstat 1.40-0,R 3.1.2。
我已經做到了這一點,將挖出的東西了,但crossing.psp和pixellate.ppp – mdsumner
由於啓動對於這個建議,我在下面回答Ege的回答。 – bph