我正在尝试使用Error: Cannot find module 'electron'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (<project pat>/app.js:2:16)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
npm ERR! Test failed. See above for more details.
打开一个简单的对比度拉伸,使用skimage
作为gdal
类型的数组打开。我首先计算百分位数:
float32
然后尝试使用:
执行拉伸p2, p98 = np.percentile(arrayF, (P1, P2))
使用GDAL写入img_rescale = exposure.rescale_intensity(arrayF, in_range=(p2, p98))
的返回图片仅包含&#39;&#39;没有数据。
问题的原因可能是数据范围。对于此arrayF,它介于0,0352989和1,03559之间。使用值0 - 255拉伸数组时,脚本可以正常工作。
这是功能:
.tiff
我发现def contrastStrecher(Raster1, p1, p2, OutDir, OutName1):
fileNameR1 = Raster1
P1 = p1
P2 =p2
outputPath = OutDir
outputName = OutName1
extension = os.path.splitext(fileNameR1)[1]
raster1 = gdal.Open(fileNameR1, GA_ReadOnly)
colsR1 = raster1.RasterXSize
rowsR1 = raster1.RasterYSize
bandsR1 = raster1.RasterCount
driverR1 = raster1.GetDriver().ShortName
geotransformR1 = raster1.GetGeoTransform()
proj1 = raster1.GetProjection()
bandF = raster1.GetRasterBand(1)
nodataF = bandF.GetNoDataValue()
newnodata = -1.
arrayF = bandF.ReadAsArray().astype("float32")
nodatamaskF = arrayF == nodataF
arrayF[nodatamaskF] = newnodata
p2, p98 = np.percentile(arrayF, (P1, P2))
img_rescale = exposure.rescale_intensity(arrayF, in_range=(p2, p98))
del arrayF
img_rescale[nodatamaskF] = newnodata
driver = gdal.GetDriverByName(driverR1)
outraster = driver.Create(outputPath + outputName + extension, colsR1, rowsR1, 1, gdal.GDT_Float32)
outraster.SetGeoTransform(geotransformR1)
outraster.SetProjection(proj1)
outband = outraster.GetRasterBand(1)
outband.WriteArray(img_rescale)
del img_rescale
outband.FlushCache()
outband.SetNoDataValue(newnodata)
del outraster, outband
的值会干扰计算。之前我为其分配了newnodata
的新方法,结果如上所述。现在使用-9999.9
似乎该函数输出了正确的结果,但我并不完全确定,因为-1.
或nodata
值不应包含在计算中。
答案 0 :(得分:0)
有一个称为百分位数拉伸的概念,其中所有通过指定的底部和顶部百分位数的东西都将分别映射到0和255,并且中间的所有像素值都将被拉伸以改善对比度。我不确定您想要的是什么,但我相信这是在此示例中使用可下载的代码完成的操作:https://scikit-image.org/docs/0.9.x/auto_examples/plot_equalize.html
但是您可能不希望某些图像映射到0,255,因此可以使用argparse()
来输入这些参数作为参数,或者使用np.amax
和np.amin
指定截止点,尝试编写将图像归档并构建适合您需求的算法。