openCV实现图像分割

一.实验目的

  1. 进一步理解图像的阈值分割方法和边缘检测方法的原理。
  2. 掌握图像基本全局阈值方法和最大类间方差法(otsu法)的原理并编程实现。
  3. 编程实现图像的边缘检测。

二.实验内容和要求

编程实现图像阈值分割(基本全局阈值方法和otsu法)和边缘检测。

三.实验主要仪器设备和材料

计算机,VS2017+OpenCV

四.实验原理与方法

图像的阈值分割的基本原理

图像的二值化处理图像分割中的一个主要内容,就是将图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。用I表示原图,R表示二值化后的图,则二值化的过程可以用以下公式表示:
在这里插入图片描述
thr表示选取的阈值。二值化的过程就是当原图的像素灰度值大于阈值就将其变白,否则就将其变黑。即将256个亮度等级的灰度图像通过适当的阀值选取而将图像变为二个级别灰度级,这样只有二个灰度级的图像在图像处理分析过程中占有非常重要的地位,特别是在实用的图像处理中。
根据对全图使用统一阈值还是对不同区域使用不同阈值,可以分为全局阈值方法(global thresholding)和局部阈值方法(local thresholding,也叫做自适应阈值方法adaptive thresholding);这种与坐标相关的阈值也叫动态阈值,具体的方法,可以参考相关的图像处理书籍。

  1. 基本全局阈值方法,即在整个图像中所有的象素点,其阈值thr相同,具体步骤为:
    (1)选取一个初始估计值T;
    (2)用T分割图像。这样便会生成两组像素集合:G1由所有灰度值大于T的像素组成,而G2由所有灰度值小于或等于T的像素组成。
    (3)对G1和G2中所有像素计算平均灰度值u1和u2。
    (4)计算新的阈值:T=(u1 + u2)/2。
    (5)重复步骤(2)到(4),直到得到的T值之差小于一个事先定义的参数T0。
  2. Otsu方法的算法步骤为:
    (1)先计算图像的归一化直方图;
    (2)i表示分类的阈值,也即一个灰度级,从0开始迭代;
    (3)通过归一化的直方图,统计0~i 灰度级的像素(背景像素) 所占整幅图像的比例w0,并统计背景像素的平均灰度u0;统计i~255灰度级的像素(前景像素) 所占整幅图像的比例w1,并统计前景像素的平均灰度u1;
    (4)计算前景像素和背景像素的方差 g = w0w1(u0-u1) (u0-u1)
    (5)i++,直到i为256时结束迭代;
    (6)将最大g相应的i值作为图像的全局阈值。

边缘检测

图像中边缘的检测可以借助一阶和二阶微分实现,常见的一阶边缘检测算子包括Roberts算子、Prewitt算子和Sobel算子,二阶算子主要是Laplacian算子,由于受噪声影响比较大,往往在使用之前先对图像进行平滑处理,LOG算子就是先对图像进行高斯平滑,然后进行拉普拉斯变换并求零交叉点。Canny算子是最优的边缘检测算子。

五.实验内容

1、图像的阈值分割:
图像为车牌图像,编写代码实现基本全局阈值法和Otsu法,比较分割结果。
在这里插入图片描述

在这里插入图片描述

2、边缘检测
用边缘检测算子对车牌图像进行处理,可以用梯度算子、Laplacian算子或Canny算子(Canny算子可以直接用OpenCV函数)。比较先阈值分割后边缘检测和直接对图像进行边缘检测这两种情况的结果是否有差别。
注意:这里提取灰度边缘即可。

在这里插入图片描述

#include "pch.h"
#include <iostream>  

#include <opencv2/opencv.hpp>  
using namespace std;
using namespace cv;

// 拉普拉斯锐化函数
void LaplacianSharpDeal(const Mat &src, Mat &dst) {
   
	if (!src.data)return;
	for (int i = 0; i < src.rows; ++i)
		for (int j = 0; j < src.cols; ++j) {
   
			float a;
			if (i > 1 && i < src.rows - 1 && j > 1 && j < src.cols - 1) {
   
				a = 5 * (float)src.at<uchar>(i, j) - (float)src.at<uchar
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值