我在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. java基础-File

    File类 * File更应该叫做一个路径, 文件路径或者文件夹路径    * 路径分为绝对路径和相对路径  * 绝对路径是一个固定的路径,从盘符开始  * 相对路径相对于某个位置,在eclipse下 ...

  2. Water 2.5.8 发布,一站式服务治理平台

    Water(水孕育万物...) Water 为项目开发.服务治理,提供一站式解决方案(可以理解为微服务架构支持套件).基于 Solon 框架开发,并支持完整的 Solon Cloud 规范:已在生产环 ...

  3. Python入门-内置对象函数

    1.callable() 查看函数知否可调用,可调用返回True,不可用返回False print("input函数:", callable(input)) #input函数: T ...

  4. numpy教程06---ndarray的进阶操作

    欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...

  5. Oracle安装 - shmmax和shmall设置

    一.概述 在Linux上安装oracle,需要对内核参数进行调整,其中有shmmax和shmall这两个参数,那这两个参数是什么意思,又该如何设置呢? 二.官方文档 在oracle的官方文档( htt ...

  6. Typora基本使用语法(超好用的代码编辑工具)

    Typora代码编辑软件,一款适合新手小白的做笔记工具,操作简单,大家可以去试试......

  7. [翻译] 使用 TensorFlow 进行分布式训练

    本文以两篇官方文档为基础来学习TensorFlow如何进行分布式训练,借此进入Strategy世界.

  8. SpringCloud分布式尝试记录

    服务提供端: 客户消费端:

  9. 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式

    接上篇:手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) https://www.cnblogs.com/densen2014/p/1614293 ...

  10. 数据库-mysql索引篇

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. mysql的索引类型? mysql中有5种索引:普通索引.唯一索引.主键 ...