直方图均衡就是从图像的灰度图入手,建立一个0~255灰度值的直方图,统计每个灰度值在直方图中出现的次数,将灰度图中对应点的灰度值记录在直方图中。接着对该直方图进行均衡化操作,使像素的灰度值分布得更加均匀,从而增强图像的亮度。在Halcon 中可以使用equ_histo_image 算子进行直方图均衡,举例如下:
*读取图像,如果是彩色图像,需要转化为单通道黑白图像
read_image (board, 'data/boardEqu')
rgbl_to_gray (board, GrayImage)
equ_histo _image (GrayImage, ImageEquHisto)
*显示直方图
gray _histo (board, board, AbsoluteHistol, RelativeHisto1)dev_open_window (0, 0, 512, 512, 'black', WindowHandle)dev _set_color ('red')
gray_histo (ImageEquHisto, ImageEquHisto, AbsoluteHisto2, RelativeHisto2)
gen_region _histo (Histol, AbsoluteHistol, 255, 5,1)
dev_set_color ('green')
gen_region histo (Histo2, AbsoluteHisto2, 255, 450, 1)
在这个例子中,使用了cqu_histo_image 算子对图像的灰度直方图进行了均衡。图(a)为原始图像,图(b)为均衡后的图像,可见亮度有明显提升。
除了可以使用均衡直方图增加亮度外,还可以增强图像的对比度,对图像的边缘和细节进行增
强,使其更加明显。在Halcon图像处理中,可以使用emphasize算子实现这一操作。代码举例如下,
read_image (text,'data/text')
emphasize (text, ImageEmphasize, 10, 10, 1.5)
dev_display(ImageEmphasize)
在这个例子中,使用了cmphasize 算子对图像的对比度进行了增强。如图所示为增强对比度
的结果。图(a)为原始图像,图(b)为增强对比度后的图像,可见对比度有明显提升。
除了使用emphasize 算子外,还可以使用scale image max 算子进行图像对比度增强,使其明暗变化更加明显。代码举例如下:
read image (text, 'data/text')
scale _image max (text, ImageScaleMax)
dev_display(ImageScaleMax)
在这个例子中,使用了scale_image_max对图像的对比度进行了增强。如图所示为增强对比度的结果。图(a)为原始图像,图(b)为使用scale_image max算子增强对比度后的图像,可见对比度有明显提升。
一些对焦不准的图像可能存在模糊不清的问题,这时需要考虑锐化操作。锐化的算子有很多,常见的如Sobel算子、Canny算子、Laplace算子等。本文介绍一种常用的冲击滤波器,其也可以进行边缘的增强,原理是在图像的边缘形成一些冲击,以对边缘进行增强。Halcon 中使用shock_filter 算子实现这一功能。代码举例如下:
read image (test, 'data/defocusComponnet')
shock_filter (test, SharpenedImage, 0.5, 20, 'canny', 2.5)
dev_display(SharpenedImage)
shock_filter算子的第5个参数是canny,也可以选择laplace,分别对应两种不同的边缘检测算子。锐化效果如图所示。
由图可以看出,模糊的边缘变得清晰,但边缘仍有毛刺等不平滑现象,可以进一步调节锐化参数,直至得到比较理想的效果。