图像增强:有目的的强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同特征之间的差别,抑制不感兴趣特征,改善图像质量,丰富信息量,满足分析需要。

1.图像增强的概念和分类

图像增强技术基本分为两类:

空间域法:包含图像像素的空间,在空间域中,直接对图像进行各种线性或非线性运算,对图像的像素灰度做增强处。分为点运算(作用于像素领域的处理方法,包括灰度变换,直方图修正,伪彩色增强等)和模板处理(作用于像素领域的处理方法,包括平滑,图像锐化等)两大类。

频域法:在图像的变换域中把图像看作一种二维信号,对其进行基于二维傅里叶变换的信号增强,常用的方法有低通滤波,高通滤波及同态滤波。

2.灰度变换

灰度变换是根据某种目标条件按一定变换关系逐像素点改变图像中灰度值的方法,也称对比度增强或对比度拉伸。常用的灰度变换方法有:线性灰度变换;分段线性灰度变换;非线性灰度变换。

线性灰度变换相关算子:

反转图像:

invert_image(image输入图像:imageinvert输出图像::)

增强图像对比度:

emphasize(image输入图像:imageemphasize输出图像:maskwidth低通掩膜宽,maskheight低通掩膜高,factor对比度强度:)

缩放图像的灰度值:

scale_image(image输入图像:imagescaled缩放后图像:mult比例因子,add补偿值:)

  1. 扩展动态范围:当mult>1时,结果会使图像灰度取值的动态范围展宽,图像对比度增大,可以改善曝光不足的缺陷,或充分利用图像显示设备的动态范围
  2. 改变取值空间:当mult=1时,变化后灰度动态范围不变,灰度取值区间会随a和c的大小而上下平移,效果是使整个图像更暗或更亮
  3. 缩小动态范围:当0<mult<1,则变换后图像动态范围会变窄,图像对比度变小
  4. 反转或取反:当mult<0,则变化后图像的灰度值会反转,即图像中亮的变暗,暗的变量;当mult=-1时,输出图像为输入图像的底片效果

线性灰度变换:

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
*显示图像
dev_display (Image)
*保存图像
dump_window (WindowHandle, 'bmp', 'halcon_dump')
*图像取反
invert_image (Image, ImageInvert)
*增加对比度
emphasize (ImageInvert, ImageEmphasize, Width, Height, 1)
*减小对比度
scale_image (ImageInvert, ImageScaled, 0.5, 0)
*增加亮度
scale_image (ImageInvert, ImageScaled1, 1, 100)
*减小亮度
scale_image (ImageInvert, ImageScaled2, 1, -100)

分段线性灰度变换相关算子:

确定区域内的最小和最大灰度值:

min_max_gray(regions需要计算的区域,image输入的图像::percent低于或高于绝对最大值或最低值的百分比:min最小灰度值,max最大灰度值,range最大最小的差值)

最大灰度值在取值范围为0到255之间展开:

scale_image_max(image输入图像:imagscalemax增强后图像::)

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
*显示图像
dev_display (Image)
*得到最大和最小灰度值
min_max_gray (Image, Image, 0, Min, Max, Range)
*扩展灰度范围
scale_image_max (Image, ImageScaleMax)
*保存图像
write_image (ImageScaleMax, 'bmp', 0, '

非线性灰度变换:

对数变换:可以扩张数值较小的灰度范围或者压缩数值较大的灰度范围;是一种有用的非线性映射交换函数,用于扩展输入图像中范围较窄的低灰度像素,压缩输入图像中范围较宽的高灰度像素,使原本低灰度值的像素部分更好的呈现。

对图像进行对数变换:

log_image(image输入图像:logimage变换后的图像:base对数的底数:)

指数变换:可以有选择性的增强低灰度区域的对比度或高灰度区域的对比度。

对图像进行指数变换:

pow_image(Image输入图像:powimage变换后图像:exponent指数:)

3.直方图处理

灰度直方图:数字图像中每一灰度级与其出现频率数间的统计关系

直方图性质:

  1. 没有位置信息
  2. 与图像之间为一对多的映射关系,任意一幅图像都有唯一确定的一个直方图与之对应,但不同的图像可能有相同的直方图
  3. 可叠加性,各个子区域之和等于该图像全图的直方图

直方图相关算子:

计算灰度值分布:

gray_histo(regions需要计算的区域,image输入的图像:::absolutehisto绝对分布,relativehisto相对分布)

得到直方图:

gen_reigon_histo(:region需要输入的区域:histogram灰度分布,row直方图中心行坐标,column直方图中心列坐标,scale直方图比例:)

对图像求取灰度直方图:

*方法一
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
*显示图像
dev_display (Image)
*点击菜单栏的“灰度直方图”按钮,得到结果*方法二
*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
*显示图像
dev_display (Image)
*计算图像的灰度值分布
gray_histo(Image, Image, AbsoluteHisto, RelativeHisto)
*获得灰度直方图
gen_region_histo (Region, AbsoluteHisto, 255, 255, 1)

直方图均衡化:把原始图像的直方图变换为均匀分布的形式,增加像素灰度值的动态范围。即是使原图像中具有相近灰度且占有大量像素点的区域的灰度范围展宽,使大区域中的微小灰度变化显现出来,增强图像整体对比对效果,使图像更加清晰。

equ_histo_image(image输入图像:imageequhisto均衡后的图像::)

直方图规范化:通过一个灰度映射函数,将原灰度直方图改造成所希望的特定形状直方图。

4.图像的平滑

图像平滑:主要是减少噪声

空域平滑法

  1. 领域平均法:进行运算的结果不仅跟本像素点灰度值有关,和其他周围的像素点的灰度值有关。核心思想为选择一个子图像(邻域),用该领域里所有像素灰度的平均值去替换领域中心像素的灰度值。平滑效果与所用的邻域半径有关,半径越大,图像模糊程度越大。
  2. 加权平均法:加权平均与邻域平均类似,区别在于加权平均的每个点对于平均数的贡献并不相等。
  3. 多图像平均法:在相同条件下采集同一目标物的若干幅图像,然后通过采集到的多幅图像进行平均的方法来消减随机噪声。

均值滤波:

mean_image(image需要滤波的图像:imagemean滤波后的图像:maskwidth掩膜宽度,maskheight掩膜高度:)

均值滤波处理:

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
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)
*将噪声图像进行均值滤波
mean_image (ImageNoise, ImageMean,9, 9)

中值滤波:每一像素点的灰度值设置为该邻域窗口内的所有像素点灰度值的中值

中值滤波:

median_image(image输入图像:imagemedian滤波后图像:masktype掩膜类型,radius掩膜尺寸,margin边界处理:)

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
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)
*对噪声进行中值滤波
median_image (ImageNoise, ImageMedian, 'circle', 3, 'mirrored')

频域低通滤波

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

低通滤波器:

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

生成理想的低通滤波图像:

gen_lowpass(:imagelowpass生成的滤波图像:frequency截止频率,norm滤波器归一化引子,mode频率图中心位置,width,height生成滤波图像的宽高:)

快速傅里叶变换:

fft_generic(image输入图像:imageFFT变换后图像:direction变换的方向,频域到空域还是空域到频域,exponent指数的符号,norm变换的归一化因子,mode DC在频率域中的位置,resulttype变换后图像类型)

频域里卷积图像:

convol_fft(imageFFT频域图像,imagefilter滤波器:imageconvol卷积后图像::)

对图像进行低通滤波处理:

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
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)
*获得一个低通滤波模型
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, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')

5.图像的锐化

从频域分析,图像的低频成分主要对应于图像中的区域和背景,高频成分主要对应于图像的边缘和细节;

图像模糊的实质是表示目标物轮廓和细节的高频分量被衰减,因而在频域可采用高频提升滤波的方法来增强图像。

图像锐化:主要是加强高频成分或削弱低频成分,使图像目标物轮廓和细节更突出。

一阶微分算子法:

  1. 梯度法
  2. Sobel算子

利用Sobl算子边缘检测:

sobel_amp(image输入图像:edgeamplitude边缘梯度图像:filtertype过滤类型,size掩模尺寸:)

利用sobel算子进行处理:

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
dev_close_window ()
*得到图像尺寸
get_image_size (Image, Width, Height)
*打开合适大小的窗口
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
*显示图像
dev_display (Image)
*对图像进行sobel算子处理
sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)
sobel_amp (Image, EdgeAmplitude, 'x', 3)
sobel_amp (Image, EdgeAmplitude, 'y', 3)

拉普拉斯算子法:

用有限差分计算拉普拉斯算子:

laplace(image输入图像:imagelaplace拉普拉斯滤波结果图像:resulttype图像类型,masksize掩膜尺寸,filtermask拉普拉斯掩膜类型:)

高通滤波法:

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

生成理想高通滤波:

gen_highpass(:imagehighpass生成的滤波器图像:frequency截止频率,norm滤波器归一化引子,mode频率图中心位置,width,height生成滤波图像宽高:)

对图像进行高通滤波处理:

*读取图像
read_image (Image, 'printer_chip/printer_chip_01')
*关掉窗口
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, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')

HALCON学习笔记(四)——图像增强相关推荐

  1. Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例

    Halcon学习笔记:1D Measuring一维测量_fuse.hdev灯丝测量示例 一.基本概念 基本流程为: 获取图像 对图像进行灰度值标定 (针对相机获取的图像灰度和输入能量之间的非线性关系, ...

  2. Halcon 学习笔记八:颜色识别

    Halcon 学习笔记八:颜色识别 一.图像处理需要的知识 二.图像处理的预处理和分割过程 二.颜色识别的方法 三.例子一 四.例子二 五.例子三 一.图像处理需要的知识 1.图像处理基础(rgb(h ...

  3. Halcon 学习笔记五:几何定位+仿射变换+测量

    Halcon 学习笔记五:几何定位+仿射变换+测量 定位流程 例子一 例子二(药片的定位) 例子三(充电宝定位) 例子四(车牌定位) 其他 定位流程 blob分析 模板匹配 (仿射变换成标准的形状) ...

  4. Halcon学习笔记(五)几何定位+仿射+车牌识别

    定位 Blob分析 模板匹配 仿射 使用单位矩阵求仿射矩阵 示例:affine_trans_region.hdev 单位矩阵 hom_mat2d_identity (HomMat2DIdentity) ...

  5. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  6. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  7. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  8. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  9. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  10. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

最新文章

  1. 【基础】CSS实现多重边框的5种方式
  2. 关于DPM(Deformable Part Model)算法中模型可视化的解释
  3. python手机销售系统详细设计_数据库详细设计文档 .doc
  4. 如何使用python爬取百度图片_【Python】爬取百度图片进行人脸识别
  5. Android中dp与px互转的方法
  6. Xamarin.Android开发实践(十四)
  7. java map 数组_java技术Spring集合属性
  8. 关联关系与依赖关系的区别
  9. mysql 中float存入int数据显示失真问题
  10. 谷歌挖角亚马逊首席AI研究员,推特工程副总裁投奔亚马逊
  11. Notification添加点击意图的学习理解
  12. python人口普查数据数据分析_利用人口普查的收入数据来选一个好学校!
  13. Eplan教程——项目检查错误 005013/005014:连接点类型不同
  14. linux soruce 命令,Linux source命令是干啥的?
  15. 基于互信息的EEG脑网络情感识别(四)——建立MI矩阵
  16. 李雅普诺夫理论基础(1)
  17. CF949D Curfew solution
  18. 《东周列国志》第九十六回 蔺相如两屈秦王 马服君单解韩围
  19. Vue视频插件vue-video-player的使用
  20. Java中字符串反转的七种方法

热门文章

  1. charles+drony+android监听websocket
  2. AutoCAD Map 3D 2013正式版发布
  3. ITIL 事件管理和问题管理的区别
  4. 笔记本给手机刷机失败数据怎么恢复
  5. 无需额外相机配件,在你的手机上利用佳能的Camera Connect APP实现延时摄影
  6. 单片机测钳形电流表_钳形电流表怎么测量直流电流?
  7. 2023软件工程毕设题目最新
  8. 阿里云部署开源IPPBX系统
  9. 美国IT企业因日韩网民网络互攻被牵连受害
  10. App 调试的几个命令实践