【发布时间】:2016-01-24 19:02:52
【问题描述】:
我需要从 4 波段图像中提取 3 波段。我正在使用一个名为 NumpyArrayToRaster() 的函数,它最多只能接受 3 个波段图像。我如何使它适用于 4 波段图像?
这是我现在的代码-
import arcpy
arcpy.CheckOutExtension("Spatial")
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
from skimage import io
from skimage.segmentation import quickshift
arcpy.env.overwriteOutput = True
# The input 4-band NAIP image
img = r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\clip4.tif'
# Convert image to numpy array
imgarr = io.imread(img)
print imgarr
print imgarr.shape
print imgarr.dtype
# Run the quick shift segmentation
segments = quickshift(imgarr, kernel_size=3, convert2lab=False, max_dist=6, ratio=0.5)
print("Quickshift number of segments: %d" % len(np.unique(segments)))
# View the segments via Python
plt.imshow(segments)
print segments
print segments.shape
print type(segments)
print segments.dtype
# Get raster metrics for coordinate info
imgRaster = arcpy.sa.Raster(img)
# Lower left coordinate of block (in map units)
mx = imgRaster.extent.XMin
my = imgRaster.extent.YMin
sr = imgRaster.spatialReference
'''
# Note the use of arcpy to convert numpy array to raster
seg = arcpy.NumPyArrayToRaster(segments, arcpy.Point(mx,my), imgRaster.meanCellWidth, imgRaster.meanCellHeight)
outRaster = r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\segments_clip4.tif'
seg_temp = seg.save(outRaster)
arcpy.DefineProjection_management(outRaster, sr)
'''
# Calculate NDVI from bands 4 and 3
b4 = arcpy.sa.Raster(r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\clip4.tif\Band_4')
b3 = arcpy.sa.Raster(r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\clip4.tif\Band_3')
ndvi = arcpy.sa.Float(b4-b3) / arcpy.sa.Float(b4+b3)
print ndvi
# Extract NDVI values based on image object boundaries
zones = arcpy.sa.ZonalStatistics(segments, "VALUE", ndvi, "MEAN")
zones.save(r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\zones_clip4.tif')
# Classify the segments based on NDVI values
binary = arcpy.sa.Con(zones < 20, 1, 0)
binary.save(r'C:\Users\Alekhya\Desktop\Krishna\NRSC\processed image\newclip4\classified_clip4.tif')
【问题讨论】:
-
向我们展示您的尝试
-
我面临的问题是将 numpy 数组转换回光栅图像。函数 NumpyArrayToRaster() 接受最多 3 个波段的图像。我目前正在使用 4 波段图像,必须将其转换为光栅。因此,我需要有关如何将其转换为 3 波段图像或任何其他没有任何波段限制的功能的建议。
-
pastie.org/10507013# 是我尝试过的代码的链接
-
目标 3 波段具有不同的波长(范围)然后在 4 波段图像中?如果是,那么您需要重新整合乐队......见Multi-Band Image raster to RGB
标签: python numpy image-processing image-extraction