《HALCON数字图像处理》第六章笔记
我在Gitee上建了个仓库,会将学习书本的时候打的一些代码上传上去,笔记中所有代码都在仓库里,初学的朋友可以一起交流哦!地址(Gitee)
第六章 图像增强
图像增强的概念和分类
基本概念:
图像增强:通过某种图像处理方法对退化的某些图像特定特征(如边缘、轮廓、对比度等)进行处理以改变图像的视觉效果。
分类:

空间域法常用增强方法有点运算和模板处理两大类,点运算是作用于单个像素的空间域,包括图像灰度变换、直方图修正、伪色彩增强等技术;模板处理是作用域像素邻域,包括图像平滑、图像锐化等技术。
频域法是在图像的变换域中把图像看作一种二维信号,对其进行基于傅里叶变换的信号增强。比如低通滤波、高通滤波、同态滤波等
灰度变换
灰度变换常用三种方法:线性灰度变换、分段线性灰度变换和非线性灰度变换。
线性灰度变换
常用算子如下
invert_image(Image : ImageInvert : : )
作用:反转图像
emphasize(Image : ImageEmphasize : MaskWidth, MaskHeight, Factor : )
作用:增强图像对比度
scale_image(Image : ImageScaled : Mult, Add : )
作用:缩放图像的灰度值
程序如下:
read_image (Image, 'lena')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
stop ()
* 图像取反
invert_image (GrayImage, ImageInvert)
dev_display (ImageInvert)
stop ()
* 增加对比度
emphasize (GrayImage, ImageEmphasize, Width, Height, 1)
dev_display (ImageEmphasize)
stop ()
* 减小对比度
scale_image (GrayImage, ImageScaled, 0.5, 0)
dev_display (ImageScaled)
stop ()
* 提高亮度
scale_image (GrayImage, ImageScaled1, 1, 50)
dev_display (ImageScaled1)
stop ()
* 减小亮度
scale_image (GrayImage, ImageScaled2, 1, -50)
dev_display (ImageScaled2)
stop ()
运行结果如下图

分段线性灰度变换
常用算子如下
min_max_gray(Regions, Image : : Percent : Min, Max, Range)
作用:确定区域内的最小和最大灰度值
scale_image_max(Image : ImageScaleMax : : )
作用:最大灰度值在取值范围为0~255之间展开
程序如下:
read_image (Image, 'lena')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* 获得最小和最大灰度值
min_max_gray (GrayImage, GrayImage, 0, Min, Max, Range)
* 拓展灰度范围
scale_image_max (GrayImage, ImageScaleMax)
dev_display (ImageScaleMax)
* 获得最小和最大灰度值
min_max_gray (ImageScaleMax, ImageScaleMax, 0, Min1, Max1, Range1)
运行结果如下图

非线性灰度变换
1. 对数变换
用到的算子如下
log_image(Image : LogImage : Base : )
作用:对图像进行对数变换
程序如下:
read_image (Image, 'lena')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* 对数变换
log_image (GrayImage, LogImage, 'e')
dev_display (LogImage)
运行结果如下图

2.指数变换
用到的算子如下
pow_image(Image : PowImage : Exponent : )
作用:对图像进行指数变换
程序如下:
read_image (Image, 'lena')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* 指数变换,γ值为0.2
pow_image (GrayImage, PowImage, 0.2)
dev_display (PowImage)
* 指数变换,γ值为1
pow_image (GrayImage, PowImage1, 1)
dev_display (PowImage1)
* 指数变换,γ值为3
pow_image (GrayImage, PowImage2, 3)
dev_display (PowImage2)
程序运行结果如下

直方图处理
直方图性质:
- 直方图没有位置信息
- 直方图与图像之间为一对多的映射关系
- 直方图的可叠加性
直方图均衡化
直方图均衡化是一种最常用的直方图修正方法,它的思想是把原始图像的直方图变换为均匀分布的形式,增加像素灰度值的动态范围。
用到的算子如下
equ_histo_image(Image : ImageEquHisto : : )
作用:直方图均衡化
程序如下:
read_image (Image, 'lena')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* 直方图均衡化
equ_histo_image (GrayImage, ImageEquHisto)
dev_display (ImageEquHisto)
程序运行结果如下

图像的平滑
图像噪声的分类如下图

图像噪声的特点
- 噪声在图像中的分布和大小不规则
- 噪声与图像之间具有相关性
- 噪声具有叠加性
空域平滑法
- 领域平均法
- 加权平均法
- 多图像平均法
均值滤波处理图像
用到的算子如下
mean_image(Image : ImageMean : MaskWidth, MaskHeight : )
作用:均值滤波
程序如下
read_image (Image, 'monkey')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)
* 生成一个高斯噪声分布
gauss_distribution (20, Distribution)
* 添加噪声到图像
add_noise_distribution (Image, ImageNoise, Distribution)
dev_display (ImageNoise)
stop ()
* 对图像进行均值滤波
mean_image (ImageNoise, ImageMean, 5, 5)
dev_display (ImageMean)
程序运行结果如下

中值滤波
中值滤波波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术
中值滤波的实现就是选择一定形式的窗口,让它在图像的各点上移动,用窗口内像素灰度值的种植代替床中心点外的像素灰度值。它对于消除孤立点和线段的干扰十分有用,能减弱或消除傅里叶空间的高频分量,但也会影响低频分量。
用到的算子如下
median_image(Image : ImageMedian : MaskType, Radius, Margin : )
作用:中值滤波
程序运行结果如下

频域低通滤波
一幅图像中灰度均匀的平滑区域对应着傅里叶变换中的低频部分,灰度变化频繁的边缘及细节对应着傅里叶变换的高频成分
几种常见低通滤波器
- 理想低通滤波器
- 巴特沃斯滤波器
- 指数低通滤波器
- 梯形低通滤波器
用到的算子如下
gen_lowpass( : ImageLowpass : Frequency, Norm, Mode, Width, Height : )
作用:生成理想的低通滤波图像
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : )
作用:快速傅里叶变换
convol_fft(ImageFFT, ImageFilter : ImageConvol : : )
作用:频域里卷积图像
程序如下
read_image (Image, 'monkey')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)
* 椒盐噪声
sp_distribution (5, 5, Distribution)
add_noise_distribution (Image, ImageNoise, Distribution)
dev_display (ImageNoise)
stop ()
* 获得低通滤波模型
gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)
* 对噪声图做傅里叶变换,获得频率图
fft_generic (ImageNoise, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
*卷积图像
convol_fft (ImageFFT, ImageLowpass, ImageConvol)
*对卷积图做傅里叶反变换
fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')
dev_display (ImageFFT1)
stop ()
程序运行结果如下

图像的锐化
图像模糊的实质是表示目标物的轮廓和细节的高频分量被衰减,因而在频域可以采用高频提升滤波的方式增强图像,图像锐化能加强细节和边缘,但同时也会放大图像噪声
用到的算子如下
sobel_amp(Image : EdgeAmplitude : FilterType, Size : )
作用:利用Sobel算子检测边缘
程序如下
read_image (Image, 'lena')
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
dev_display (GrayImage)
* Sobel算子锐化
sobel_amp (GrayImage, EdgeAmplitude, 'sum_abs', 3)
dev_display (EdgeAmplitude)
stop ()
* Sobel的X方向锐化
sobel_amp (GrayImage, EdgeAmplitude1, 'x', 3)
dev_display (EdgeAmplitude1)
stop ()
* Sobel的y方向锐化
sobel_amp (GrayImage, EdgeAmplitude2, 'y', 3)
dev_display (EdgeAmplitude2)
stop ()
程序运行结果如下

高通滤波
几种常用高通滤波器
- 理想高通滤波器
- 巴特沃斯高通滤波器
- 指数高通滤波器
- 梯形高通滤波器
用到的算子如下
gen_highpass( : ImageHighpass : Frequency, Norm, Mode, Width, Height : )
作用:生成理想高通滤波图
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : )
作用:快速傅里叶变换
convol_fft(ImageFFT, ImageFilter : ImageConvol : : )
作用:频域里卷积图像
程序如下
read_image (Image, 'monkey')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)
* 得到高通滤波模型
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', Width, Height)
* 傅里叶变换
fft_generic (Image, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')
* 对频率图做高通滤波
convol_fft (ImageFFT, ImageHighpass, ImageConvol)
* 傅里叶反变换
fft_generic (ImageConvol, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'byte')
dev_display (ImageFFT1)
stop ()
程序运行结果如下

图像的彩色增强
伪彩色增强是指将每个灰度级匹配到彩色空间上的一点,将单色图像映射为彩色图像的一种变换
常见的伪彩色增强方法
- 密度分割法
- 灰度级彩色处理
- 频率域滤波法
第六章的笔记就到这里啦,如果你一路看到了这里,帮我点个赞吧O(∩_∩)O~,祝大家学习能有所收获!
《HALCON数字图像处理》第六章笔记的更多相关文章
- 《HALCON数字图像处理》第一、二章笔记
目录 第一章 绪论 1.1 图像和图像处理 1.1.1 图像 1.1.2 数字图像 1.1.3 图像处理及其发展过程 1.2 数字图像处理的步骤和方法 1.3 数字图像处理系统的硬件组成 1.4 数字 ...
- 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波
0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...
- 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言
0.下定决心 当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门.以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成 ...
- 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...
- 《HALCON数字图像处理》第五章笔记
目录 第五章 图像运算 图像的代数运算 加法运算 图像减法 图像乘法 图像除法 图像逻辑运算(位操作) 图像的几何变换 图像几何变换的一般表达式 仿射变换 投影变换 灰度插值 图像校正 我在Gitee ...
- 《HALCON数字图像处理》第四章笔记
目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...
- 《HALCON数字图像处理》第三章笔记
目录 第三章 HALCON图像处理基础 HALCON控制语句 HALCON算子 HALCON图像处理入门 HALCON图像读取 HALCON图像显示 图形窗口 图像显示 显示文字 HALCON图像转换 ...
- 《python编程从入门到实践》第六章笔记
1.字典 字典:一系列键-值对,每一个键都与每一个值相关联.与键相关联的值可以是数字.字符串.列表和字典. 最简单的字典只有一个键值对. eg: alien = {'color':'green','p ...
- c#数字图像处理(六)直方图均衡化
直方图均衡化又称直方图修平,是一种很重要的非线性点运算.使用该方法可以加强图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好的在直方图上分布. 直方图均衡化的基 ...
随机推荐
- java中请给一个Abstract类实现接口的实例!
2.Abstract类实现接口 马克-to-win:如果实现某接口的类是abstract类,则它可以不实现该接口所有的方法.但其非abstract的子类中必须拥有所有抽象方法的实在的方法体:(当然它a ...
- java中自动插入一个默认的构造函数,这到底怎么回事?
1.2 当没有任何构造函数,java编译器,会插入一个默认的构造函数 见下面的例子: class Line { double x = 0.02; double y; } publ ...
- 机器学习---kmeans聚类的python实现
""" Name: study_kmeans.py Author: KX-Lau Time: 2020/11/6 16:59 Desc: 实现kmeans聚类 " ...
- MySQL---增删改查数据库、表、记录
对库的操作 # 增 create database db1 charset utf8; # 删 drop database db1; # 改 alter database db1 charget gb ...
- SSM实现个人博客-day02
2.数据库设计 项目源码:SSM实现个人博客 有问题请询问vx:kht808
- json在前后台传递的形式
json对象和json字符串的区别纠结了好久一阵子,经过查阅大量博客资料总结得,字符串形式它就是带单引号或者双引号的,对象就是没有被引号包括,可以直接进行调用属性.前后端间数据传递json形式应该是字 ...
- Lumia一键刷稳定版 Win10 arm 及其报错处理
前言 之前我发了一篇Lumia1520 刷Win10 arm双系统的文章,不过后来发现那个方法对小白来说太不友好,且系统也不稳定,所以我找到了更好的方法 刷机 我们可以利用刷机迷进行刷机,支持一键刷机 ...
- AcWing 1027. 方格取数(线性DP)
题目链接 题目描述 设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0.如下图所示: 某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B ...
- OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析
(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...
- 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...