skimage - 使用python进行对比拉伸

时间:2017-01-16 10:16:49

标签: python-2.7 image-processing contrast scikit-image

我正在尝试使用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值不应包含在计算中。

Sample of the image:

1 个答案:

答案 0 :(得分:0)

有一个称为百分位数拉伸的概念,其中所有通过指定的底部和顶部百分位数的东西都将分别映射到0和255,并且中间的所有像素值都将被拉伸以改善对比度。我不确定您想要的是什么,但我相信这是在此示例中使用可下载的代码完成的操作:https://scikit-image.org/docs/0.9.x/auto_examples/plot_equalize.html 但是您可能不希望某些图像映射到0,255,因此可以使用argparse()来输入这些参数作为参数,或者使用np.amaxnp.amin指定截止点,尝试编写将图像归档并构建适合您需求的算法。