边缘零交叉二值化

边缘零交叉二值化原理:
通过LoG算子检测出边缘并将二侧的局部象素划分为背景和目标2类;当局部均为目标或者背景(这时不存在边缘)时,先将其确定为待定区域,然后进行连通区域标记,最后根据标记后连通区域周围象素的属性判断归属将其正确地进行二值化。

1.Log算子边缘检测
log边缘检测非常好理解,先进行高斯平滑处理,再进行拉普拉斯边缘检测,最终得到的图像数据为含有正负号的二次导数的图像。
边缘零交叉二值化_第1张图片

2.分类
依据LoG算子计算后对图像的边缘零交叉结果h(x,y),对图像像素进行分类,借助局部区域图像象素灰度的极大值和极小值的差值s来判断该区域属于均一区域还是真正的边缘,分为前景(目标),背景和待定区。
(1)当s大于某个阈值且h(x,y)>0时,令该象素为背景 -1。
(2)当s大于某个阈值且h(x,y)<0时,令该象素为目标 1。
(3)当前二者条件都不满足时,令该象素为待定区域‘0’。

此时的待定区可以用使用otsu算法再次进行分类,采用这种方法的话,第三步将省略。

差值计算代码:

int getNeighborMaxDiff(Mat src, Point center_point, int half_size)
{
	int max = 0;
	int min = 256;
	int max_diff = 0;

	int nr = src.rows;
	int nc = src.cols * src.channels();

	int start_x = 0;
	int end_x = 0;
	int start_y = 0;
	int end_y = 0;

	if(center_point.x - half_size < 0)
	{
		start_x = 0;
	}
	else
	{
		start_x = center_point.x - half_size;
	

你可能感兴趣的:(Image,Processing)