图像分割实验(二值化,otsu、迭代法、区域生长、区域分割)vs2010+opencv2.4

图像分割实验

实验目的

  1. 理解和掌握图像分割的基本理论和算法;
  2. 掌握用阈值法进行图像分割的基本方法;
  3. 掌握基于区域分割的图像分割方法。

二、实验环境与设备

  1. 计算机;
  2. VC++程序;

三、实验内容
打开计算机,启动VisualC++程序建立工程,工程文件夹中应有待处理的图像文件;编程实现基于区域的图像分割,并与普通的阈值分割图像作比较;记录和整理实验报告。

四、实验原理与步骤
1.连通定义
在数字图像中,一个像素在空间上可能非常接近其它一些像素。在用网格表示的数字图像中,一个像素与其它四个像素有公共边界,并与另外四个像素共享顶角。如果两个像素有公共边界,则称它们互为4邻点(4-neighbors)。同样,如果两个像素至少共享一个顶点,则称它们互为8邻点。

  1. 连通成分标记
    在一幅图像中找出连通成分是数字图像中最常见的运算之一。连通区域内的点构成表示物体的候选区域。机器视觉中的大多数物体都有表面,显然,物体表面点投影到图像平面上会形成空间上密集的点集。这里应该指出,连通成分算法常常会在二值视觉系统中形成瓶颈效应,原因是连通成分运算是一个全局性的运算,这种算法在本质上是连贯的。如果图像中仅有一个物体,那么找连通成分就没有必要;如果图像中有许多物体,且需要求出物体的特性与位置,则必须确定连通成分。
    连通标记算法可以找到图像中的所有连通成分,并对同一连通成分中的所有点分配同一标记。

  2. 递归算法
    算法步骤如下:
    ① 扫描图像,找到没有标记的1点,给它分配一个新的标记L;
    ② 递归分配标记L给1点的邻点;
    ③ 如果不存在没标记的点,则停止;
    ④ 返回第①步。

  3. 区域分裂算法
    如果区域的某些特性不是恒定的,则区域应该分裂。基于分裂方法的图像分割过程是从最大的区域开始,在许多情况下,常把整个图像作为起始分裂的图像。
    算法步骤如下:
    ① 形成初始区域;
    ② 对图像的每一个区域,连续执行下面两步:
    •计算区域灰度值方差;
    •如果方差值大于某一阈值,则沿着某一适合的边界分裂区域。

  4. 区域增长算法
    在许多图像中,单个区域内的灰度值不是完全恒定的,因此需要更复杂的算法来进行图像分割。其中最好的算法是那些基于如下假设的算法,即图像可以划分成区域,而区域可以用简单函数模型化。
    可由分割问题导出如下算法:寻找初始区域核,并从区域核开始,逐渐增长核区域,形成满足一定约束的较大的区域。
    算法步骤如下:
    ① 把图像划分成初始区域核;
    ② 用平面模型拟合每一个区域核;
    ③ 对每一个区域,通过区域模型向邻接区域外插,求取与该区域兼容的所有点;
    ④ 如果没有兼容点,则增加模型阶数。如果模型阶数大于最大的模型阶数,停止区域增长;否则,回到第③步,继续区域增长;
    ⑤ 形成新的区域,重新用相同阶数的模型能够拟合新区域,计算拟合最佳度;
    ⑥ 计算区域模型的新老拟合最佳度之差;
    ⑦ 如果新老拟合最佳度之差小于某一给定阈值,回到第三步,继续区域增长;
    ⑧ 增加模型阶数,如果模型阶数大于最大的模型阶数,停止区域增长;
    用新的模型阶数再拟合区域模型。入伙拟合误差增加,接收新的模型阶数,回到第③步,继续区域增长,否则,停止区域增长。

实验代码

#include<opencv2\opencv.hpp>
#include<iostream>
#include <algorithm>
#include <cstdlib>
#include<math.h>
#include<stdlib.h>
#include <ctime>
#include<stack>
using namespace cv;
using namespace std;
int T,To;//分别为迭代阈值法和otsu法计算的最佳阈值
int myotsu(Mat &src);//otsu法确定阈值函数
void RegionGrowing(Mat src,Mat &src1,Point pt);//区域生长法
void RegionCut(Mat src,Mat &src1);//区域分裂法
int main(int argc, char* argv[])
{
	const char* image="C:\\Users\\dell\\Desktop\\test3.jpg";//读取图像文件
	Mat img = imread(image); 
	if (!img.data)
	{
		cout << "读入图像出错" << endl;
		return -1;
	}
	Mat s
  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值