Trích xuất các khu vực tán cây từ dữ liệu viễn thám (hình ảnh trực quan và LiDAR)


12

Tôi đang tìm kiếm một phương pháp để xử lý một hình ảnh viễn thám và trích xuất các khu vực vương miện của các cây riêng lẻ từ hình ảnh.

Tôi có cả hình ảnh diện tích bước sóng trực quan và dữ liệu xoay vòng từ khu vực. Vị trí được đề cập là một khu vực sa mạc, vì vậy lớp phủ cây không dày đặc như khu vực rừng. Độ phân giải của hình ảnh trên không là 0,5 feet 0,5. Độ phân giải nắp là khoảng 1 x 1 feet. Cả dữ liệu hình ảnh và dữ liệu đều đến từ bộ dữ liệu của Pima County, Arizona. Một mẫu của loại hình ảnh trên không tôi có ở cuối bài này.

Câu hỏi này Phát hiện cây đơn trong ArcMap? dường như là cùng một vấn đề, nhưng dường như không có câu trả lời hay ở đó.

Tôi có thể có được sự phân loại hợp lý các loại thảm thực vật (và thông tin về tỷ lệ phần trăm tổng thể) trong khu vực bằng cách sử dụng phân loại Cụm Iso trong Arcmap, nhưng điều này cung cấp rất ít thông tin về từng cây. Điều tôi gần nhất với những gì tôi muốn là kết quả của việc chuyển đầu ra của phân loại isocluster thông qua tính năng Raster sang Polygon trong Arcmap. Vấn đề là phương pháp này hợp nhất gần cây thành một đa giác duy nhất.

Chỉnh sửa: Tôi có lẽ nên bao gồm một số chi tiết hơn về những gì tôi có. Các bộ dữ liệu thô tôi có là:

  • Dữ liệu las đầy đủ, và một raster tiff được tạo ra từ nó.
  • Hình ảnh trực quan (như hình ảnh mẫu được hiển thị, nhưng bao phủ một khu vực rộng hơn nhiều)
  • Đo trực tiếp bằng tay một tập hợp con của các cây trong khu vực.

Từ những điều này tôi đã tạo ra:

  1. Các phân loại mặt đất / thảm thực vật.
  2. Các trình quét DEM / DSM.

mẫu hình ảnh trên không


Bạn đã có nhiều dữ liệu hơn liên kết. Bạn có các tập tin las phân loại hoặc chỉ raster DEM / DSM (cái nào?)? Thật sự không dễ để làm điều này chỉ với các bước sóng thị giác với bất kỳ mức độ chính xác nào.
Michael Promotionson

Tôi có lẽ nên bao gồm một số chi tiết hơn về những gì tôi có. Các bộ dữ liệu thô tôi có là: 1. Dữ liệu las đầy đủ và một raster tiff được tạo từ nó 2. Hình ảnh trực quan (giống như hình ảnh mẫu được hiển thị, nhưng bao phủ một khu vực rộng hơn nhiều) 3. đo trực tiếp thủ công một tập hợp con của cây trong khu vực. Từ những điều này tôi đã tạo ra: 1. phân loại mặt đất / thảm thực vật 2. các raster DEM / DSM
Theodore Jones

Bạn có quyền truy cập vào Nhận thức điện tử? Nếu không, phần mềm xử lý hình ảnh hoặc ngôn ngữ lập trình nào bạn có quyền truy cập hoặc biết?
Aaron

Tôi không có bản sao của Nhận thức điện tử, nhưng tôi sẽ kiểm tra xem có ai biết trong phòng thí nghiệm / trường đại học của tôi không vì nó có vẻ phổ biến cho loại điều này. Tôi am hiểu về Python, C và Java. Tôi có một bản sao của Matlab nhưng tôi gần như không biết gì về nó. Tôi có quyền truy cập vào bất kỳ phần mềm nào trong danh sách này softwarelicense.arizona.edu/students , cộng với, tất nhiên là ArcGIS.
Theodore Jones

Một chút chi tiết trong các ứng dụng thương mại tôi có. Một số trong những phần mềm mà tôi liên kết là Matlab, Mathematica, JMP và các công cụ thống kê khác và các công cụ phát triển phần mềm như Visual Studio.
Theodore Jones

Câu trả lời:


10

Có một tài liệu đáng kể về phát hiện vương miện cá nhân trong dữ liệu quang phổ và dữ liệu. Phương pháp khôn ngoan, có lẽ bắt đầu bằng:

Falkowski, MJ, AMS Smith, PE Gessler, AT Hudak, LA Vierling và JS Evans. (2008). Ảnh hưởng của tán rừng lá kim đến độ chính xác của hai thuật toán đo cây riêng lẻ sử dụng dữ liệu nắp. Tạp chí viễn thám Canada 34 (2): 338-350.

Smith AMS, EK Strand, CM Steele, DB Hann, SR Garrity, MJ Falkowski, JS Evans (2008) Sản xuất bản đồ cấu trúc không gian thực vật bằng cách phân tích từng đối tượng của sự xâm lấn của cây bách xù trong các bức ảnh chụp từ trên không theo thời gian. Tạp chí Canada Viễn thám 34 (2): 268-285

Nếu bạn quan tâm đến phương pháp Wavelet (Smith et al., 2008), tôi đã mã hóa nó bằng Python nhưng, nó rất chậm. Nếu bạn có kinh nghiệm Matlab, đây là nơi nó được thực hiện trong chế độ sản xuất. Chúng tôi có hai bài báo mà chúng tôi đã xác định được ~ 6 triệu mẫu đất lấn chiếm cây bách xù ở miền đông Oregon bằng phương pháp sóng con với hình ảnh NAIP RGB-NIR, vì vậy nó đã được chứng minh.

Baruch-Mordo, S., JS Evans, J. Severson, JD Naugle, J. Kiesecker, J. Maestas và MJ Falkowski (2013) Cứu sage-grouse khỏi cây: Một giải pháp chủ động để giảm mối đe dọa chính đối với một ứng cử viên loài Bảo tồn sinh học 167: 233-241

Poznanovic, AJ, MJ Falkowski, AL Maclean và JS Evans (2014) Một đánh giá chính xác về thuật toán phát hiện cây ở Juniper Woodlands. Kỹ thuật quang điện ảnh & Viễn thám 80 (5): 627 Ảo637

Có một số cách tiếp cận thú vị, trong phân rã đối tượng nói chung, từ tài liệu không gian trạng thái toán học ứng dụng sử dụng các quá trình Gaussian đa biến để phân rã các đặc điểm của đối tượng theo tỷ lệ. Tôi sử dụng các loại mô hình này để mô tả quá trình đa quy mô trong các mô hình sinh thái nhưng nó có thể được điều chỉnh để phân rã các đặc điểm đối tượng hình ảnh. Vui, nhưng một chút bí truyền.

Gramacy, RB và HKH Lee (2008) Bayesian thực hiện các mô hình quy trình Gaussian với một ứng dụng cho mô hình máy tính. Tạp chí của Hiệp hội Thống kê Hoa Kỳ, 103 (483): 1119 Từ1130

Kim, HM, BK Mallick và CC Holmes (2005) Phân tích dữ liệu không gian không cố định bằng cách sử dụng các quy trình Gaussian từng phần. Tạp chí của Hiệp hội Thống kê Hoa Kỳ, 100 (470): 653 Từ668


+1 Đặc biệt cho tùy chọn 4; Vì OP có dữ liệu nắp, nên sẽ chạy phương pháp wavelet trên mô hình bề mặt tán. Mặc dù, như bạn đã biết, phương pháp wavelet chưa thực sự chính thống (hoặc có thể là bao giờ).
Aaron

Trong một lý tưởng cho lý tưởng một kích cỡ phù hợp với tất cả, tôi sẽ bắt đầu coi phần mềm thương mại (ví dụ: ESRI, ERDAS) là phần mềm Big-box. Thường thì giải pháp tốt nhất, hoặc bất kỳ giải pháp nào, không có sẵn trong "Phần mềm hộp lớn". Thông thường người ta phải hướng tới sự phát triển hoặc cộng đồng học thuật để tìm câu trả lời cho các vấn đề phân tích không gian phức tạp. Điều này đưa bạn ra khỏi dòng chính trong một vội vàng lớn. May mắn thay, các cộng đồng này muốn chia sẻ. Đây cũng là lý do tại sao điều quan trọng đối với một nhà phân tích là không dựa vào các giải pháp nút nhấn.
Jeffrey Evans

2
Tôi có xu hướng đồng ý về BBS cho các vấn đề không gian phức tạp. Tuy nhiên, trích xuất một loại thực vật duy nhất trong môi trường khô cằn - đặc biệt là nếu bạn có quyền truy cập vào dữ liệu khai thác - là khá chính thống. Trong trường hợp này, không cần phải phát minh lại bánh xe bằng cách phát triển một phương pháp mới để nhận dạng cây đơn giản. Suy nghĩ của tôi là tại sao không sử dụng một cách tiếp cận nút nhấn được thiết lập sẵn, đặc biệt là trong một gói như eCognition, rất phù hợp cho tự động hóa?
Aaron

1
Tôi nên thêm rằng Nhận thức điện tử có khả năng cho ID vương miện riêng lẻ. Ví dụ: bạn có thể tìm thấy một quy tắc mẫu tại cộng đồng eCog sử dụng phương pháp trồng hạt giống - tìm kiếm "Bộ quy tắc mẫu phân định cây cọ dầu". Tích hợp thuật toán khớp mẫu mới của eCog và phương pháp phát triển hạt giống này có thể có khả năng là một phương pháp rất mạnh.
Aaron

1
Tôi quan tâm đến mã python mà bạn đề cập cho phương pháp Wavelet Smith (2008). Nó có sẵn ở bất cứ đâu?
Alpheus

4

eCognition là phần mềm tốt nhất cho điều đó, tôi đã làm điều đó bằng cách sử dụng phần mềm khác nhưng nhận thức tốt hơn. Dưới đây là tài liệu tham khảo về văn học về chủ đề này:

Karlson, M., Reese, H., & Ostwald, M. (2014). Bản đồ vương miện cây trong các khu rừng được quản lý (Parklands) của Tây Phi bán khô cằn bằng cách sử dụng phân tích hình ảnh dựa trên hình ảnh và đối tượng địa lý của WorldView-2. Cảm biến, 14 (12), 22643-22669.

ví dụ http://www.mdpi.com/1424-8220/14/12/22643

Ngoài ra:

Zagalikis, G., Cameron, AD, & Miller, DR (2005). Việc áp dụng kỹ thuật phân tích ảnh và kỹ thuật phân tích hình ảnh để rút ra các đặc điểm của cây và đứng. Tạp chí nghiên cứu lâm nghiệp Canada, 35 (5), 1224-1237.

ví dụ: http://www.nrcresearchpress.com/doi/abs/10.1139/x05-030#.VJmMb14gAA


Bạn có thể vui lòng mở rộng lý do tại sao nhận thức điện tử tốt hơn? Liên kết chỉ trả lời có xu hướng trở nên không còn tồn tại khi liên kết biến mất.
Aaron

1
Nhận thức điện tử là phần mềm phân tích hình ảnh dựa trên đối tượng khác không phải kể từ bây giờ. Tôi đã sử dụng cách tiếp cận tương tự. Ứng dụng của kỹ thuật phân tích ảnh và kỹ thuật phân tích hình ảnh để lấy được đặc điểm của cây và đứng G Zagalikis, AD Cameron, Tạp chí nghiên cứu lâm nghiệp DR Miller Canada, 2005, 35 (5): 1224-1237, 10.1139 / x05-030 nrcresearchpress.com/doi /abs/10.1139/x05-030#.VJmMb14gAA
Giorgos Zagalikis

1
Cảm ơn các Giorgos tham khảo. Tôi nghĩ rằng những bình luận này sẽ hoạt động tốt như một chỉnh sửa cho câu trả lời của bạn.
Aaron

3

Để tạo một DHM trừ DEM khỏi DEM, điều này có thể được thực hiện trong Máy tính Raster Esri hoặc GDAL_CALC . Điều này sẽ đặt tất cả các độ cao của bạn trên một 'sân chơi bình đẳng'.

Cú pháp (Thay thế đường dẫn đầy đủ cho DEM, DSM & DHM):

GDAL_CALC.py -A DSM -B DEM --outfile=DHM --CALC "A-B"

DHM sẽ chủ yếu là 0 (hoặc gần đủ), mà bạn thực hiện giá trị nốt của bạn. Với Máy tính Raster hoặc GDAL_CALC, bạn có thể trích xuất các giá trị nhiều hơn một giá trị tùy ý dựa trên lượng nhiễu bạn quan sát được trong DHM. Mục đích của việc này là để giảm tiếng ồn và làm nổi bật chỉ các tán cây - trong trường hợp hai 'cây' liền kề nhau, điều này sẽ chia thành hai đốm màu riêng biệt.

Cú pháp (Thay thế đường dẫn đầy đủ cho Binary & DHM và giá trị quan sát cho Giá trị):

GDAL_CALC.py -A DHM --outfile=Binary --calc "A*(A>Value)"

Bây giờ với GDAL_CALC hoặc Esri IsNull, hãy tạo một raster nhị phân, có thể được đa giác hóa với GDAL_Polygonize hoặc Esri Raster thành Polygon .

Để tinh chỉnh các đa giác loại bỏ các đa giác nhỏ quá mức và sau đó so sánh chúng với các dải RGB tìm kiếm chữ ký, trong công cụ Thống kê Zonal của Esri sẽ giúp ích. Sau đó, bạn có thể loại bỏ các đa giác rõ ràng không có số liệu thống kê phù hợp (dựa trên thử nghiệm và dữ liệu của bạn, tôi không thể cung cấp cho bạn các giá trị).

Điều này sẽ giúp bạn có độ chính xác khoảng 80% khi vẽ các vương miện riêng lẻ.


Cảm ơn. Tôi sẽ xem nếu tôi nhận được kết quả tốt từ phương pháp này.
Theodore Jones

Bạn sẽ cần thực hiện một số thử nghiệm để có được các giá trị phù hợp, tôi khuyên bạn nên cắt các khu vực nhỏ dưới dạng các mẫu biểu thị (tương tự) các khu vực tốt nhất / tồi tệ nhất trong dữ liệu của bạn. Có thể mất nửa tá lần chạy mẫu để có được thông số của bạn nhưng điều đó vẫn tốt hơn so với việc vẽ chúng bằng tay.
Michael Promotionson

3

Tôi đã có cùng một vấn đề một vài năm trước đây. Tôi có một giải pháp không yêu cầu dữ liệu LAS được lọc hoặc dữ liệu phụ trợ khác. Nếu bạn có quyền truy cập vào dữ liệu LiDAR và có thể tạo DEM / DSM / DHM (DEM sau đây, tôi không tranh luận về ngữ nghĩa của danh pháp mô hình bề mặt) từ các trả về khác nhau, tập lệnh sau có thể hữu ích.

Kịch bản Arcpy ăn vào 3 DEM và phun ra một hình đa giác rừng và các hình dạng điểm cây. 3 DEM phải có cùng độ phân giải không gian (nghĩa là 1 mét) và phạm vi, và đại diện cho lợi nhuận đầu tiên, lợi nhuận cuối cùng và đất trống. Tôi đã có các thông số rất cụ thể để trích xuất rau, nhưng các thông số có thể được thay đổi để phù hợp với các nhu cầu khác. Tôi chắc chắn rằng quá trình này có thể được cải thiện, vì đây là nỗ lực nghiêm túc đầu tiên của tôi đối với kịch bản python.

# Name:         Veg_Extractor.py
# Date:         2013-07-16
# Usage:        ArcMap 10.0; Spatial Analyst
# Input:        1 meter DEMs for first returns (DEM1), last returns (DEM2), and bare earth (BE)
# Output:       forest polygon (veg with height > 4m) shapefile with holes > 500m removed;
#               tree point (veg with height > 4m, crown radius of 9 cells) shapefile
# Notes:        Raises error if input raster cell sizes differ

import arcpy, os
from arcpy import env
from arcpy.sa import *

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Script arguments
dem1 = arcpy.GetParameterAsText(0) #input Raster Layer, First Return DEM
dem2 = arcpy.GetParameterAsText(1) #input Raster Layer, Last Return DEM
bare_earth = arcpy.GetParameterAsText(2) #input Raster Layer, Bare Earth DEM
outForest = arcpy.GetParameterAsText(3) #shapefile
outTree = arcpy.GetParameterAsText(4) #shapefile

# Make sure cell size of input rasters are same
arcpy.AddMessage("Checking cell sizes...")
dem1Xresult = arcpy.GetRasterProperties_management(dem1, "CELLSIZEX")
dem1Yresult = arcpy.GetRasterProperties_management(dem1, "CELLSIZEY")
dem2Xresult = arcpy.GetRasterProperties_management(dem2, "CELLSIZEX")
dem2Yresult = arcpy.GetRasterProperties_management(dem2, "CELLSIZEY")
beXresult = arcpy.GetRasterProperties_management(bare_earth, "CELLSIZEX")
beYresult = arcpy.GetRasterProperties_management(bare_earth, "CELLSIZEY")
dem1X = round(float(dem1Xresult.getOutput(0)),4)
dem1Y = round(float(dem1Yresult.getOutput(0)),4)
dem2X = round(float(dem2Xresult.getOutput(0)),4)
dem2Y = round(float(dem2Yresult.getOutput(0)),4)
beX = round(float(beXresult.getOutput(0)),4)
beY = round(float(beYresult.getOutput(0)),4)
if (dem1X == dem1Y == dem2X == dem2Y == beX == beY) == True:
    arcpy.AddMessage("Cell sizes match.")
else:
    arcpy.AddMessage("Input Raster Cell Sizes:")
    arcpy.AddMessage("DEM1: (" + str(dem1X) + "," + str(dem1Y) + ")")
    arcpy.AddMessage("DEM2: (" + str(dem2X) + "," + str(dem2Y) + ")")
    arcpy.AddMessage("  BE: (" + str(beX) + "," + str(beY) + ")")
    raise Exception("Cell sizes do not match.")

# Check map units
dem1_spatial_ref = arcpy.Describe(dem1).spatialReference
dem1_units = dem1_spatial_ref.linearUnitName
dem2_spatial_ref = arcpy.Describe(dem2).spatialReference
dem2_units = dem2_spatial_ref.linearUnitName
bare_earth_spatial_ref = arcpy.Describe(bare_earth).spatialReference
bare_earth_units = bare_earth_spatial_ref.linearUnitName
if (dem1_units == dem2_units == bare_earth_units) == True:
    if dem1_units == "Meter":
        area = "500 SquareMeters" #Area variable for meter
        unit = 1 #meter
    elif (dem1_units == "Foot_US") or (dem1_units == "Foot"):
        area = "5382 SquareFeet" #Area variable for feet
        unit = 3.28084 #feet in meter
    else:
        raise Exception("Units are not 'Meter', 'Foot_US', or 'Foot'.")
else:
    raise Exception("Linear units do not match.  Check spatial reference.")

# Local variables:
(workspace, filename) = os.path.split(outForest)
arcpy.env.workspace = workspace
arcpy.env.overwriteOutput = True
dem1 = Raster(dem1)
dem2 = Raster(dem2)
bare_earth = Raster(bare_earth)
nbr1 = NbrRectangle(3, 3, "CELL")
nbr2 = NbrRectangle(5, 5, "CELL")
nbr3 = NbrCircle(5, "CELL")

# Give units and multiplier
arcpy.AddMessage("Linear units are " + dem1_units + ". Using multiplier of " + str(unit) + "...")

arcpy.AddMessage("Processing DEMs...")
# Process: Raster Calculator (DEM1 - BE)
ndsm_dem1 = dem1 - bare_earth

# Process: Raster Calculator (DEM1 - DEM2)
d1_d2 = dem1 - dem2

# Process: Raster Calculator
threshold_d1d2 = (d1_d2 > (0.1 * unit))  &  (ndsm_dem1 >= (4.0 * unit))

# Process: Focal Statistics (max 3x3)
focal_max1 = FocalStatistics(threshold_d1d2, nbr1, "MAXIMUM", "DATA")

# Process: Focal Statistics (majority 5x5)
focal_majority = FocalStatistics(focal_max1, nbr2, "MAJORITY", "DATA")

# Process: Con
con_ndsm_dem1 = Con(ndsm_dem1 >= (4.0 * unit), focal_majority, focal_max1)
focal_majority = None
focal_max1 = None

# Process: Focal Statistics (min 3x3)
focal_min1 = FocalStatistics(con_ndsm_dem1, nbr1, "MINIMUM", "DATA")
con_ndsm_dem1 = None

# Process: Focal Statistics (min 3x3)
veg_mask = FocalStatistics(focal_min1, nbr1, "MINIMUM", "DATA")

# Process: Focal Statistics (max R5)
focal_max2 = FocalStatistics(ndsm_dem1, nbr3, "MAXIMUM", "DATA")

arcpy.AddMessage("Calculating tree points...")
# Process: Raster Calculator
tree_points = (veg_mask == 1) & (ndsm_dem1 == focal_max2) & (ndsm_dem1 >= (4.0 * unit))
ndsm_dem1 = None
focal_max2 = None

# Process: Raster Calculator
tree_pick = Pick(tree_points == 1, 1)
tree_points = None

# Process: Raster to Polygon
arcpy.RasterToPolygon_conversion(tree_pick, workspace + "\\tree_poly.shp", "SIMPLIFY", "Value")
tree_pick = None

# Process: Feature To Point
arcpy.AddMessage("Writing tree points...")
arcpy.env.workspace = workspace #reset workspace
arcpy.env.overwriteOutput = True #reset overwrite permission
arcpy.FeatureToPoint_management(workspace + "\\tree_poly.shp", outTree, "CENTROID")

arcpy.AddMessage("Calculating forest polygons...")
# Process: Focal Statistics (max 3x3)
forests = FocalStatistics(veg_mask, nbr1, "MAXIMUM", "DATA")
veg_mask = None

# Process: Raster Calculator
forest_pick = Pick(forests == 1, 1)

# Process: Raster to Polygon
arcpy.RasterToPolygon_conversion(forest_pick, workspace + "\\forest_poly.shp", "SIMPLIFY", "Value")

# Process: Eliminate Holes > 500 sq m (5382 sq ft)
arcpy.AddMessage("Writing forest polygons...")
arcpy.EliminatePolygonPart_management(workspace + "\\forest_poly.shp", outForest, "AREA", area, "0", "CONTAINED_ONLY")

# Clean up
arcpy.AddMessage("Cleaing up...")
arcpy.Delete_management(workspace + "\\tree_poly.shp")
arcpy.Delete_management(workspace + "\\forest_poly.shp")

2

Tôi đang đăng bài này dưới dạng câu trả lời do giới hạn độ dài trong nhận xét, không có hy vọng cho các khoản tín dụng :). Bàn chải rất rộng, cung cấp cho bạn đã có DEM.

  1. Trích xuất DEM cho đa giác riêng lẻ để dem.
  2. Xác định cực trị độ cao của dem
  3. Đặt zCur + = - zStep. Bước được tìm thấy bởi các lần lặp trước, ví dụ: thả hợp lý giữa độ cao của 'ô trên đỉnh cây' và hàng xóm
  4. Dưới đây = Con (dem => zCur, int (1))
  5. Nhóm khu vực dưới đây. Đếm đủ lớn, đó là 'cây'. Định nghĩa cần có ở đây bằng kiểm tra trực quan, nghiên cứu sơ bộ?
  6. Goto bước 3 nếu zCur> zMin, bước 1 nếu không.

Số lượng nhóm tối đa trong tiến trình = số cây bên trong đa giác riêng lẻ. Các tiêu chí bổ sung, ví dụ khoảng cách giữa các 'cây' bên trong đa giác có thể giúp ... làm mịn DEM bằng kernel cũng là một tùy chọn.


Tôi tin rằng bạn đang đề cập đến DSM chứ không phải DEM ... Thông thường, cây cối, cấu trúc và các thứ linh tinh khác không biến nó thành DEM nhưng có tính năng trong DSM (trừ các lớp tiếng ồn). DSM - DEM = DHM (mô hình chiều cao). Tất cả những thứ này có thể được trích xuất một cách hợp lý từ dữ liệu LiDAR, ngay cả khi nó chỉ được phân loại mặt đất / nonground, nhưng nếu bạn có DEM và không phải là LAS bạn đang đi lên lạch mà không có mái chèo vì các tính năng bạn theo đuổi không có có !
Michael Promotionson

Yeap, DHM như bạn mô tả sẽ làm. Tôi biết rất ít về Lidar.
FelixIP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.