柵格數(shù)據(jù)就是將空間分割成有規(guī)律的網(wǎng)格,每個(gè)網(wǎng)格作為一個(gè)單元启涯,每一個(gè)單元的位置是由行和列定義。網(wǎng)格中任意一個(gè)單元都是圖像中對(duì)應(yīng)的一個(gè)點(diǎn)恃轩,
網(wǎng)上找的一張參考圖如下
這里我們測(cè)試使用GeoTrellis將數(shù)組進(jìn)行轉(zhuǎn)成一個(gè)柵格结洼,再進(jìn)行3 * 3鄰域平均法處理數(shù)據(jù)。
object demo1 {
def main(args:Array[String]): Unit ={
val nd= NODATA
val input = Array[Int](
nd, 7, 1, 1, 3, 5, 9, 8, 2,
9, 1, 1, 2, 2, 2, 4, 3, 5,
3, 8, 1, 3, 3, 3, 1, 2, 2,
2, 4, 7, 1, nd, 1, 8, 4, 3);
//將一維數(shù)組轉(zhuǎn)換成9列4行的數(shù)組
val iat = IntArrayTile(input, 9, 4);
println(iat.asciiDraw());
// 3 * 3 矩陣
val focalNeighborhood = Square(1);
println(focalNeighborhood)
val meanTile = iat.focalMean(focalNeighborhood)
for (i <-0 to 3){
for (j <-0 to 8){
print(meanTile.getDouble(j,i)+" ")
}
println()
}
}
輸出結(jié)果
ND 7 1 1 3 5 9 8 2
9 1 1 2 2 2 4 3 5
3 8 1 3 3 3 1 2 2
2 4 7 1 ND 1 8 4 3
O O O
O O O
O O O
5.666666666666667 3.8 2.1666666666666665 1.6666666666666667 2.5 4.166666666666667 5.166666666666667 5.166666666666667 4.5
5.6 3.875 2.7777777777777777 1.8888888888888888 2.6666666666666665 3.5555555555555554 4.111111111111111 4.0 3.6666666666666665
4.5 4.0 3.111111111111111 2.5 2.125 3.0 3.111111111111111 3.5555555555555554 3.1666666666666665
4.25 4.166666666666667 4.0 3.0 2.2 3.2 3.1666666666666665 3.3333333333333335 2.75
看到這一堆數(shù)據(jù)結(jié)果有一些頭疼吧叉跛,不知道是怎么運(yùn)算出來的,我們來簡(jiǎn)單說一下什么是鄰域平均法松忍。
第一次運(yùn)算的時(shí)候就是從ND開始,獲取周邊 3 * 3 的圖像數(shù)據(jù)筷厘,左邊和上邊都沒有值鸣峭,右邊為7宏所,下邊為9,1摊溶。所以計(jì)算的值為9 + 1 + 7 / 數(shù)量3 = 5.66666....爬骤,ND為是無數(shù)據(jù)的意思所以不參與運(yùn)算,
那我們開始計(jì)算第二值莫换,從7開始霞玄,上面無數(shù)據(jù),右邊為1拉岁,下面是9坷剧,1,1喊暖,左邊為ND,
9 + 1 + 1 + 1 + 7 / 數(shù)量5 = 3.8惫企。
第一次運(yùn)算
第二次運(yùn)算