我在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)

程序运行结果如下

直方图处理

直方图性质:

  1. 直方图没有位置信息
  2. 直方图与图像之间为一对多的映射关系
  3. 直方图的可叠加性

直方图均衡化

直方图均衡化是一种最常用的直方图修正方法,它的思想是把原始图像的直方图变换为均匀分布的形式,增加像素灰度值的动态范围。

用到的算子如下

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)

程序运行结果如下

图像的平滑

图像噪声的分类如下图

图像噪声的特点

  1. 噪声在图像中的分布和大小不规则
  2. 噪声与图像之间具有相关性
  3. 噪声具有叠加性

空域平滑法

  1. 领域平均法
  2. 加权平均法
  3. 多图像平均法

均值滤波处理图像

用到的算子如下

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 : )

作用:中值滤波

程序运行结果如下

频域低通滤波

一幅图像中灰度均匀的平滑区域对应着傅里叶变换中的低频部分,灰度变化频繁的边缘及细节对应着傅里叶变换的高频成分

几种常见低通滤波器

  1. 理想低通滤波器
  2. 巴特沃斯滤波器
  3. 指数低通滤波器
  4. 梯形低通滤波器

用到的算子如下

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 ()

程序运行结果如下

高通滤波

几种常用高通滤波器

  1. 理想高通滤波器
  2. 巴特沃斯高通滤波器
  3. 指数高通滤波器
  4. 梯形高通滤波器

用到的算子如下

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 ()

程序运行结果如下

图像的彩色增强

伪彩色增强是指将每个灰度级匹配到彩色空间上的一点,将单色图像映射为彩色图像的一种变换

常见的伪彩色增强方法

  1. 密度分割法
  2. 灰度级彩色处理
  3. 频率域滤波法

第六章的笔记就到这里啦,如果你一路看到了这里,帮我点个赞吧O(∩_∩)O~,祝大家学习能有所收获!

《HALCON数字图像处理》第六章笔记的更多相关文章

  1. 《HALCON数字图像处理》第一、二章笔记

    目录 第一章 绪论 1.1 图像和图像处理 1.1.1 图像 1.1.2 数字图像 1.1.3 图像处理及其发展过程 1.2 数字图像处理的步骤和方法 1.3 数字图像处理系统的硬件组成 1.4 数字 ...

  2. 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

    0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...

  3. 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言

    0.下定决心 当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门.以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成 ...

  4. 【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转、缩放具体解释

    本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说,主要通过MFC单文档视图实现显示BMP图片空间几何变换.包含图像平移.图形 ...

  5. 《HALCON数字图像处理》第五章笔记

    目录 第五章 图像运算 图像的代数运算 加法运算 图像减法 图像乘法 图像除法 图像逻辑运算(位操作) 图像的几何变换 图像几何变换的一般表达式 仿射变换 投影变换 灰度插值 图像校正 我在Gitee ...

  6. 《HALCON数字图像处理》第四章笔记

    目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...

  7. 《HALCON数字图像处理》第三章笔记

    目录 第三章 HALCON图像处理基础 HALCON控制语句 HALCON算子 HALCON图像处理入门 HALCON图像读取 HALCON图像显示 图形窗口 图像显示 显示文字 HALCON图像转换 ...

  8. 《python编程从入门到实践》第六章笔记

    1.字典 字典:一系列键-值对,每一个键都与每一个值相关联.与键相关联的值可以是数字.字符串.列表和字典. 最简单的字典只有一个键值对. eg: alien = {'color':'green','p ...

  9. c#数字图像处理(六)直方图均衡化

    直方图均衡化又称直方图修平,是一种很重要的非线性点运算.使用该方法可以加强图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候.通过这种方法,亮度可以更好的在直方图上分布. 直方图均衡化的基 ...

随机推荐

  1. CCF201912-2 回收站选址

    解题思路:这道题唬人的在于坐标有正有负哈,刚开始不知道怎么下爪,仔细思考过后,我可是会面向对象编程的啊哈哈哈哈,我可是最喜欢封装了哈哈哈哈. 1.首先可以把每个点用一个结构体来定义,包含他的x,y坐标 ...

  2. JavaScript操作checkbox复选框

    运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...

  3. 如何在云服务器上安装vim(bash: vim :command not found)

    1.apt-get update 2.apt-get install vim vim文件即可成功!

  4. 基于Apache Hudi在Google云构建数据湖平台

    自从计算机出现以来,我们一直在尝试寻找计算机存储一些信息的方法,存储在计算机上的信息(也称为数据)有多种形式,数据变得如此重要,以至于信息现在已成为触手可及的商品.多年来数据以多种方式存储在计算机中, ...

  5. 4.Java开发环境的搭建

    Java开发环境搭建 一.JDK下载与安装 JDK8下载地址 选择目录,点击下一步 二.配置环境变量 变量名:JAVA_HOME 变量值:JDK安装路径 变量值:CLASSPATH 变量值:.;%JA ...

  6. 将个人项目发布到mavan中央仓库

    第一步,准备自己的git代码 比如在gitee或者github上的代码,我的是gitee码云上的,开源了一个处理业务日志采集的组件,支持注解方式,支持SpEL表达式,支持变量自定义. 话不多说,直接上 ...

  7. 2021.08.01 P4311 数字序列(左偏树)

    2021.08.01 P4311 数字序列(左偏树) [P4331 BalticOI 2004]Sequence 数字序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1 ...

  8. django orm 更新数据时间不自动更新问题

    gmt_create自动添加auto_now_add:gmt_modify自动更新auto_now class CommonInfo(models.Model): """ ...

  9. vscode 开发项目, Prettier ESLint的配置全攻略(基础篇)

    我们在做项目尤其是多人合作开发的时候经常会因为不同的开发规范和代码风格导致出现冲突, 为了能统一代码风格和规范我们需要使用到prettier和eslint,接下来就一vscode编辑器为例详细讲解下: ...

  10. come on! 基于LinkedHashMap实现LRU缓存

    /** * @Description 基于LinkedHashMap实现一个基于'LRU最近最少使用'算法的缓存,并且最多存MAX个值 * @Author afei * @date:2021/4/25 ...