图像形态学轮廓处理人脸边缘轮廓提取(下巴、嘴唇)

2023-12-22 04:32

本文主要是介绍图像形态学轮廓处理人脸边缘轮廓提取(下巴、嘴唇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

形态学轮廓提取

  1. 流程分析
    这里写图片描述
    原图像imgA:
    这里写图片描述
    噪声滤除图像imgB:
    这里写图片描述
    腐蚀处理图像imgC:
    这里写图片描述
    相减操作图像imgD:
    这里写图片描述
    二值化处理结果imgE:
    这里写图片描述

  2. 原理分析:
    2.1膨胀:求像素的局部最大值
    将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行如下卷积操作:
    这里写图片描述
    2.2腐蚀:求像素的局部最小值
    将图像(或图像的一部分区域,我们称之为A)与核(我们称之为B)进行如下卷积操作:
    这里写图片描述
    (膨胀腐蚀原理详细可参见博客:http://blog.sina.com.cn/s/blog_6f57a7150100ooin.html 非常感谢博主的分享。)
    2.3噪声滤除:
    开运算: A∘ B=(A⊝B)⊕B
    闭运算: A·B=(A⊕B)⊝B
    噪声滤除: {[(A⊝B)⊕B]⊕B}⊝B=(A∘ B)·B
    这里写图片描述
    在上图中,(a)是原图像,外部有噪声块,内部有噪声孔,(b)为结构元素,尺寸大于所有噪声块和噪声孔,(c)是用(b)去腐蚀(a)的结果,可见,外部的噪声块被去除;之后用(b)去膨胀(c)两次,得到(e),此时已经去除了内部的噪声孔,在进行一次腐蚀操作,得到和原图一样大小的去噪图像(f)。

  3. 实验对比:
    3.1图像格式对比:
    参数设置:不进行噪声滤除,腐蚀2次,十字核,尺寸3*3
    二值图像;
    这里写图片描述
    灰度图像:
    这里写图片描述
    RGB图像:
    这里写图片描述

    3.2核样式对比:
    参数设置:RGB图像,不进行”噪声滤除”,腐蚀1次,尺寸5*5,二值化阈值100.
    这里写图片描述

    3.3核尺寸对比:
    参数设置:RGB图像,不进行”噪声滤除”,十字型核样式,腐蚀1次,二值化阈值100
    这里写图片描述

    3.4腐蚀次数对比:
    参数设置:RGB图像,不进行”噪声滤除”,十字型核样式,尺寸5*5,二值化阈值100
    这里写图片描述

    3.5噪声滤除强度对比:
    参数设置: RGB图像,十字型,腐蚀1次,核样式,尺寸5*5,二值化阈值100
    这里写图片描述

    3.6对比分析:
    图像格式:RGB格式提取轮廓效果较好,灰度和二值图像信息相对有限。
    核样式:十字型效果最佳,矩形和圆形容易造成噪点。
    核尺寸:尺寸过小,轮廓提取不完整;尺寸过大,容易出现噪点。
    腐蚀次数:腐蚀次数过小,轮廓提取不完整;次数过多,容易出现噪点,且轮廓边缘强度过大。
    噪声滤除:影响把图像轮廓深度信息提取。(标红区域)

  4. 代码:

morphology.h

#pragma once
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include <opencv2/opencv.hpp>
#include <iostream>
using 

这篇关于图像形态学轮廓处理人脸边缘轮廓提取(下巴、嘴唇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/522617

相关文章

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用