我在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~,祝大家学习能有所收获!