直方图与图像分割:图像直方图、灰度阈值分割、区域生长法分割

灰度直方图

通过灰度直方图看到图像的照明效果

 

灰度阈值分割

假设:图像中的目标区和背景区之间或者不同目标区之间,存在不同的灰度或平均灰度

凡是灰度值包含于z的像素都变成某一灰度值,其他的变成另一个灰度值,则该图像就以z为界被分成两个区域

如果=1和0,分割后的图像为二值图像

确定最佳阈值,使背景和目标之间的差异最大

 

大津(Otsu)算法

确定最佳阈值,使背景和目标之间的类间方差最大(因为二者差异最大)

算法实现:遍历灰度取值

原始米粒图像

使用Otsu算法进行阈值化结果

 

区域生长法分割

从种子点开始,按照一定的准则(如相邻像素灰度相似性)向周围扩散,将领域相似像素加入区域中

区域生长实现步骤:

1、对图像顺序扫描,找到第一个还没有归属的像素,设该像素为(x0,y0);

2、以(x0,y0)为中心,考虑(x0,y0)的8领域像素(x,y),如果(x,y)满足生长准则,将(x,y)与(x0,y0)合并,同时将(x,y)压入堆栈;

3、从堆栈中取出一个像素,把它当做(x0,y0)返回到步骤2;

4、当堆栈为空时,返回步骤1;

5、重复步骤1 - 4直到图像中的每个点都有归属时,生长结束。

 

相关函数

计算灰度直方图

CV_EXPORTS void calcHist( const Mat* images, int nimages,
                                               const int* channels, InputArray mask,
                                               SparseMat& hist, int dims,
                                               const int* histSize, const float** ranges,
                                               bool uniform = true, bool accumulate = false );

大津算法计算阈值

CV_EXPORTS_W double threshold( InputArray src, OutputArray dst,
                                                           double thresh, double maxval, int type );

漫水填充(区域生长发)

CV_EXPORTS int floodFill( InputOutputArray image,
                                            Point seedPoint, Scalar newVal, CV_OUT Rect* rect = 0,
                                            Scalar loDiff = Scalar(), Scalar upDiff = Scalar(),
                                            int flags = 4 );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值