小伙伴们做影像镶嵌后,在接边的地方会有黑洞存在,小伙伴需要找到黑洞,并对黑洞进行ps处理。人工查找速度慢,还有可能漏掉,他们需要个小程序能够定位到黑洞。
实际情况是,因为给我的影像时镶嵌后的影像,虽然说有个镶嵌线,但是说这个线不准,可能不在影像内。
首先分析需求
第一步:影像重采样。我循环遍历影像所有的像素值,然后对影像进行重分类,对同一位置所有波段该点像素值进行判断如果都是0或者5之间,那重新赋值成0,如果都是255,那么赋值成255,其他的就赋值成200。
第二步:影像矢量化成shp,将像素值赋值给shp的一个属性。
ps:这么做有可能将不是黑洞的地方查找出来,如果线是准的,在以上第一步前,可以对这个线进行缓冲,转成面,然后按照这个面的范围裁剪出接边范围内的影像,然后只对接边内的影像进行重采样,再转shp。
使用的语言是c#,然后影像处理使用的是gdal。写了一个基于c#,gdal的查找影像漏洞的exe小程序。
配置gda
刚开始配置gdal,我就踩坑了,,,我用vs的nuget引入gdal没有成功;然后手动引入gdal_csharp.dll,gdalconst_wrap.dll,ogr_csharp.dll,osr_csharp.dll四个dll,程序虽然生成成功,但是Gdal.AllRegister()语句执行时,就报错了,说找不到gdal_wrap.dll,然后我就想着引入gdal_wrap.dll,但是不让引入,那我想有可能是因为gdal_csharp.dll内部引用了gdal_wrap.dll,他找不到对应的路径,于是我将gdal所有相关的dll都放到程序bin文件夹下,程序运行成功了。