Advertisement

【Halcon机器视觉】ch5 图像预处理

阅读量:
图像的变换与矫正
  • 平移、旋转、和缩放——仿射变换和仿射变换矩阵
  • 仿射变换矩阵应用于:像素点、二维点、图像、区域、XLD轮廓等对象
复制代码
    *创建空仿射变换矩阵
    hom_mat2d_identity(HomMat2DIdentity)
    *xy各平移30变换
    hom_mat2d_translate(HomMat2DIdentity, 30, 30, HomMat2DTranslate)
    *旋转
    hom_mat2d_rotate(HomMat2DIdentity, 0.78, 0, 0, HomMat2DRotate)
    *缩放2倍
    hom_mat2d_scale(HomMat2DIdentity, 2, 2, 0, 0, HomMat2DScale)
    
    
    
      
      
      
      
      
      
      
      
      
    
ROI:需要提取出一张图
复制代码
    *关闭当前窗口,清空屏幕
    dev_close_window()
    *读取一张图片
    read_image(Image,'./images/chepai.jpg')
    *获取图像大小,以建立合适尺寸的窗口
    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)
    *选择ROI
    gen_rectangle1(ROI_0,100, 20, 300, 500)
    *从原图中分割出ROI
    reduce_domain(GrayImage,ROI_0, ImageReduced)
    *在新窗口中显示分割后的ROI图像
    dev_open_window(0,0,Width,Height,'black',WindowHandle1)
    *显示图片
    dev_display(ImageReduced)
    
    
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
图像增强

突出图像中细节,为后续的特征识别或检测做准备

  • 直方图均衡:0-255灰度值的直方图,均衡就是使灰度值分布均匀
  • 增强对比度:对图像的边缘和细节进行增强
  • 处理失胶图像:锐化算子(SObel、Canny、Laplace)冲击滤波器shock_fliter

直方图均衡可用equ_histo_image算子,如

复制代码
    read_image(image,'image.jpg')
    rgb1_to_gray(image,grayimage)
    *直方图均衡
    equ_histo_image(grayimage,ImageEquHisto)
    
    *显示直方图
    gray_histo(image,image,AbsoluteHisto1,RelativeHisto1)
    gray_histo(ImageEquHisto,ImageEquHisto,AbsoluteHisto2,RelativeHisto2)
    dev_open_window(0,0,512,512,'black',WindowHandle)
    *处理前直方图
    dev_set_color('red')
    gen_region_histo(Histo1,AbsoluteHisto1,255,5,1)
    *处理后直方图
    dev_set_color('green')
    gen_region_histo(Histo2,AbsoluteHisto2,255,450,1)
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

处理前
在这里插入图片描述
处理后
在这里插入图片描述
均衡前后灰度直方图对比,均衡后分布均匀一点,亮度有所提高。
在这里插入图片描述

增强对比度
复制代码
    read_image(Image,'image.jpg')
    emphasize(Image,ImageEmphasize,7, 7, 2)
    dev_display(ImageEmphasize)
    
    read_image(Image2,'image.jpg')
    scale_image_max(Image2,ImageScaleMax)
    dev_display(ImageScaleMax)
    
    
    
      
      
      
      
      
      
      
      
    

emphasize算子效果
在这里插入图片描述
scale_image_max算子效果:
在这里插入图片描述

处理失焦图片

可使用’canny‘,‘Sobel’,'Laplace’等算子,对边缘进行冲击。

复制代码
    read_image(Image3,'shijiao')
    shock_filter(Image3, SharpenedImage, 0.5, 20, 'canny', 2.5)
    dev_display(SharpenedImage)
    
    
      
      
      
    
在这里插入图片描述
图像平滑与去噪

由于拍摄图像会存在杂点和噪声,可以采用图像平滑的方法去噪:均值滤波、中值滤波、高斯滤波等

均值滤波:mean_image(); 临域内像素值相加取平均值,有一个滑动窗口,默认尺寸为9的正方形。缺点在于导致图像模糊,容易模糊边界

中值滤波:mdian_image(); 将区域灰度值进行排序,取中间值,算子。对于去除孤立噪点有效,可以保留边缘信息,注意滤波器尺寸过大也容易模糊图像

高斯滤波:gauss_filter(); 调用二维离散的高斯函数,适合去除高斯滤波,尺寸越大,平滑效果越明显,一般取3,5,7,9

均值滤波 mean_image
复制代码
    dev_close_window()
    read_image(Image,'zhaosheng')
    mean_image(Image,ImageMean, 9, 9)
    dev_open_window(0,0, 512, 512, 'black', WindowHandle)
    dev_display(Image)
    dev_open_window(0, 0, 512, 512, 'black', WindowHandle1)
    dev_display(ImageMean)
    
    
      
      
      
      
      
      
      
    

输入噪声图
在这里插入图片描述
结果
在这里插入图片描述

复制代码
    read_image(Image1, 'zhaosheng')
    median_image(Image1, ImageMedian, 'circle', 1, 'mirrored')
    dev_display(ImageMedian)
    
    
      
      
      
    

circle核结果,并不理想
在这里插入图片描述

复制代码
    read_image(Image1, 'zhaosheng')
    median_image(Image1, ImageMedian, 'square', 1, 'mirrored')
    dev_display(ImageMedian)
    
    
      
      
      
    

square核结果,效果显著
在这里插入图片描述
高斯滤波效果

复制代码
    *高斯滤波
    read_image(Image2,'zhaosheng.jpg')
    gauss_filter(Image2,ImageGauss,9)
    dev_display(ImageGauss)
    
    
    
      
      
      
      
      
    
在这里插入图片描述
光照不均匀

前面知道直方图均衡可以增强图片亮度均匀性,所以对于彩色照片,可以分离三通道,分别直方图处理后再合成。

复制代码
    read_image(Image, 'an')
    decompose3(Image, Image1, Image2, Image3)
    mean_image(Image1, ImageMean, 9, 9)
    emphasize(ImageMean, ImageEmphasize, 5, 5, 1.5)
    illuminate(ImageEmphasize, ImageIlluminate, 20, 20, 0.55)
    equ_histo_image(Image2,ImageEquHisto2)
    equ_histo_image(Image3,ImageEquHisto3)
    compose3(ImageIlluminate, ImageEquHisto2, ImageEquHisto3, MultiChannelImage)
    dev_display(MultiChannelImage)
    
    
    
      
      
      
      
      
      
      
      
      
      
    

全部评论 (0)

还没有任何评论哟~