写作前面:关于本文方法的二值图片打开为全黑的问题:1、请在envi中打开即显示为黑白图;2、若在arcmap打开,请在符号系统中-设置根据值显示不同颜色(因为gis中默认最大value值与最小value值显示为相同颜色)。
OTSU方法是一种很好的阈值计算方法,在图像分割中经常用到,关于otsu原理网上有很多,这里直接上代码实现。
在计算完阈值后,添加栅格数据渲染方法显示分割效果。以此验证阈值计算的效果。
public static int Otsu_Binaryzation(IRasterLayer RasterLayer)
{
int OTSU = 0;
IRaster pRaster = RasterLayer.Raster;
IRasterBandCollection pBandCol = pRaster as IRasterBandCollection;
IRasterBand pBand = pBandCol.Item(0);//选择第一波段作为分级依据
IRasterProps pRasterProps = pRaster as IRasterProps;
//获取图层的行列值
int Height = pRasterProps.Height;//当前栅格数据集的行数
int Width = pRasterProps.Width;//当前栅格数据集的列数
if (pBand.Histogram == null)
{
pBand.ComputeStatsAndHist();//创建直方图
}
IRasterStatistics pRasterStatistic = pBand.Statistics;
double MaxValue = pRasterStatistic.Maximum;
double MinValue