我在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. 关于20组---三重奏的meet的评价

    meet这一软件是一款交友软件,新版本完善了以前版本的各种不足,而且能够通过手机号发验证码来创建新账户,功能多样,可以在星球.广场找到自己感兴趣的人,基本满足的交友需求. 但有一点不足之处,就是缺少创 ...

  2. 升级DLL plugin 到AutoDllPlugin

    为了使打包构建速度加快使用的DLLPlugin,但是我们还是需要手动把dll文件引入文件, HTMLwebpackplugin 结合autoDLLplugin可以自动引入打包文件, 十份地方便

  3. 邮件任务-springboot

    邮件任务-springboot springboot可以很容易实现邮件的发送 具体实现步骤: 导入jar包 <dependency> <groupId>org.springfr ...

  4. Go xmas2020 学习笔记 08、Functions, Parameters & Defer

    08-Functions, Parameters. functions. first class. function signatures. parameter. pass by value. pas ...

  5. 防抖-小程序-input输入频繁时搜索出bug

    html: <input type="text" class="input_search" placeholder="搜索周边店铺"  ...

  6. Educational Codeforces Round 116 (Rated for Div. 2), problem: (C) Banknotes

    传送门 Problem - C - Codeforces 题目 题目重点内容手打翻译:(欢迎批评指正) 在柏林, 使用着n套不同的货币(banknotes).第i个货币面额为10ai 元,货币的第一种 ...

  7. go源码阅读 - container/ring

    相比于List,环的结构有些特殊,环的头部就是尾部,所以每个元素可以代表自身这个环.环其实是一个双向回环链表.type Ring struct { next, prev *Ring Value int ...

  8. Java语言学习day15--7月21日

    今日内容介绍1.Eclipse开发工具2.超市库存管理系统 ###01Eclipse的下载安装 * A: Eclipse的下载安装  * a: 下载 * http://www.eclipse.org ...

  9. go语言编译过程概述

    go语言编译过程概述 总结自<go语言设计与实现> 名词解释: 中间代码 中间代码是编译器或者虚拟机使用的语言,它可以来帮助我们分析计算机程序.在编译过程中,编译器会在将源代码转换到机器码 ...

  10. Java第十五周作业

    Cola公司的雇员分为以下若干类:(知识点:多态) [必做题]• 4.1 ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份.方法:getSalary(int mont ...