itk中的图像分割算法(三)
2017-08-11 15:53
671 查看
接上篇(二),继续看自动化阈值分割算法,今天的内容是:迭代阈值法,没找到英文名字,莫非是Iterative threshold segmentation?
我用的itk中没有提供这个类,那就自己实现一下吧~ 照旧,本文中只搞代码实现,理论请自行搜索~
本文参考了参考文献中的部分代码,详情请点击最后的链接。
所谓迭代法,就是先猜一个值,看这个值是不是符合要求,如果不是,就迭代再猜,直到有一个值能贴近要求的最优解。
参考文献:
http://www.vtk.org/Wiki/ITK/Examples/Segmentation/ThresholdImageFilterDemo
http://blog.csdn.net/a361251388leaning/article/details/50198351
我用的itk中没有提供这个类,那就自己实现一下吧~ 照旧,本文中只搞代码实现,理论请自行搜索~
本文参考了参考文献中的部分代码,详情请点击最后的链接。
int IterationThreshold(ImageType2D *src) { ImageType2D::RegionType inputRegion = src->GetLargestPossibleRegion(); ImageType2D::SizeType size = inputRegion.GetSize();//获得图像大小 int width = size[0];//宽 int height = size[1];//高 //histogram 获得灰度直方图 float histogram[256] = {0}; typedef itk::ImageRegionIteratorWithIndex<ImageType2D> FieldIterator; FieldIterator fieldIter( src, src->GetLargestPossibleRegion());//创建一个像素迭代器 fieldIter.GoToBegin();//迭代器指向图像数组开始 ImageType2D::IndexType index; while( !fieldIter.IsAtEnd() )//不到最后一个点,一直循环下去 { index=fieldIter.GetIndex();//获得该点坐标 unsigned char p = src->GetPixel(index);//获得该点像素值 histogram[p]++;//放入灰度直方图 ++fieldIter; } //求图像的平均灰度值作为初始阈值 int T0 = 0; for (int i = 0; i < 256; i ++) { T0 += i * histogram[i]; } T0 /= width * height; //平均灰度 //迭代 int T1 = 0, T2 = 0; int num1 = 0, num2 = 0; int T = 0; while (1) { for ( int i = 0; i < T0+1; i ++) //小于T0的部分 { T1 += i * histogram[i]; num1 += histogram[i]; } if (num1 == 0) continue; for ( int i = T0 + 1; i < 256; i ++) //大于T0的部分 { T2 += i * histogram[i]; num2 += histogram[i]; } if (num2 == 0) continue; T = (T1 / num1 + T2 / num2) / 2; //刷新阈值T if ( T == T0 ) break; //若相等,返回T else T0 = T; //若不等,继续 } return T; }
所谓迭代法,就是先猜一个值,看这个值是不是符合要求,如果不是,就迭代再猜,直到有一个值能贴近要求的最优解。
参考文献:
http://www.vtk.org/Wiki/ITK/Examples/Segmentation/ThresholdImageFilterDemo
http://blog.csdn.net/a361251388leaning/article/details/50198351
相关文章推荐
- itk中的图像分割算法(四)
- itk中的图像分割算法(一)
- itk中的图像分割算法(二)
- itk中的图像分割算法(五)
- 图像处理算法基础(九)---求最佳分割门限并分割
- 思考: 现有 图像分割算法 的缺陷
- itk中的图像缩小算法
- 图像分割方法deeplab以及Hole算法解析
- SLIC图像超像素分割算法解析
- 顾广华白细胞图像的自动分割算法的相关改进
- 图像分割基础算法及实现实例
- 基于GraphCuts图割算法的图像分割----OpenCV代码与实现
- 【图像算法】彩色图像分割专题一:颜色空间1(原理)
- 【图像算法】彩色图像分割专题六:一种基于颜色直方图的图像分割
- 【图像算法】彩色图像分割专题八:基于MeanShift的彩色分割
- 笔记:图像分割算法之 Graph Cut
- 闭合式求解算法用于图像分割
- image segmentation emulating ecognition source code in vc6 图像分割算法模仿FENA
- GrabCut in One Cut(基于图割算法grabcut的一次快速图像分割的OpenCV实现)----目前效果最好的图割
- ITK图像分割三个示例