勇哥的实验,常见halcon图像过滤器的测试(六):guided_filter,bilateral_filter,anisotropic_diffusion三个边缘保持滤波器的对比

勇哥注:

图片过滤器是一切缺陷检测、边缘提取、图片分割前处理、分类器应用等等的基础。有很重要的研究意义。

因此勇哥会写成一个系列贴子以和大家一起分享。


-正文---------------------------------------------------------------------

本篇引自halcon的一个例程,讲述了guided_filter,bilateral_filter,anisotropic_diffusion三个滤波器的对比。

为啥要把这三个滤波器放在一起对比呢?

因为它们都属于边缘保持(Edge-perserving)滤波器,本来还应该有最小二乘滤波(WLS),但是halcon中找不到它。


bilateral_filter  双边滤波器,在本系列第2篇已经讲过,见:

http://www.skcircle.com/?id=1557

http://www.skcircle.com/?id=1659  


guided_filter 导向滤波器,其原理说明见: http://www.skcircle.com/?id=1662

anisotropic_diffusion  各向异性扩散滤波器,其原理说明见: http://www.skcircle.com/?id=1663


下面来看看程序的执行结果:

image.png

image.png

image.png

image.png

下面三张为上面应用三种过滤器后效果的局部放大图,以观察细节。

image.png

image.png

image.png

image.png

执行时间统计

image.png


换一张图片继续测试。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png


从这里可以看到,三种过滤器的耗时跟图片纹理的复杂度有关系。

image.png



* 这个例子程序展示了如何使用各向异性扩散来平滑图像,同时保留或增强不同程度的边缘信息。
* 
* 准备可视化
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_set_part (0, 0, 511, 511)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_clear_window ()
Methods := ['\'guided_filter\'','\'bilateral_filter\'','\'anisotropic_diffusion\'']
Message := 'Compare different methods for'
Message[1] := 'edge-preserving smoothing:'
Message := [Message,' - ' + Methods]
dev_disp_text (Message, 'window', 12, 12, 'white', 'box', 'false')
dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
stop ()
* 
Loops := 5
Radius := 2
Amplitude := 15
SigmaSpatial := Radius
SigmaRange := Amplitude
Contrast := 3
Theta := 10
Iterations := 1
* 
ImageFiles := ['mreut','claudia']
read_image (Images, ImageFiles)
for Index := 1 to |ImageFiles| by 1
    select_obj (Images, Image, Index)
    get_image_size (Image, ImageWidth, ImageHeight)
    dev_resize_window_fit_size (0, 0, ImageWidth, ImageHeight, -1, -1)
    dev_display (Image)
    Message := 'Original image'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    * 执行导向过滤器.
    * 
    * 执行一次缓存以允许更稳定的时间度量.
    guided_filter (Image, Image, ImageGuided, Radius, Amplitude)
    * 记录运行时间
    count_seconds (S1)
    for L := 1 to Loops by 1
        guided_filter (Image, Image, ImageGuided, Radius, Amplitude)
    endfor
    count_seconds (S2)
    TimeGuided := S2 - S1
    dev_display (ImageGuided)
    Message := 'Guided filter'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    * 执行双边过滤器.
    * 
    * 执行一次缓存以允许更稳定的时间度量.
    bilateral_filter (Image, Image, ImageBilateral, SigmaSpatial, SigmaRange, [], [])
    * M记录运行时间
    count_seconds (S3)
    for L := 1 to Loops by 1
        bilateral_filter (Image, Image, ImageBilateral, SigmaSpatial, SigmaRange, [], [])
    endfor
    count_seconds (S4)
    TimeBilateral := S4 - S3
    dev_display (ImageBilateral)
    Message := 'Bilateral filter'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    * 利用mode方式的parabolic 边缘检测函数进行各向异性扩散。
    *请注意,此函数仍允许在边之间进行轻微的扩散(平滑)
    * 
    * 执行一次缓存以允许更稳定的时间度量.
    anisotropic_diffusion (Image, ImagePeronaMalik, 'perona-malik', Contrast, Theta, Iterations)
    * 记录运行时间
    count_seconds (S5)
    for L := 1 to Loops by 1
        anisotropic_diffusion (Image, ImagePeronaMalik, 'perona-malik', Contrast, Theta, Iterations)
    endfor
    count_seconds (S6)
    TimeAnisoDiff := S6 - S5
    dev_display (ImagePeronaMalik)
    Message := 'Perona-Malik anisotropic diffusion'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    * Display detail
    if (ImageFiles[Index - 1] == 'mreut')
        dev_set_part (111, 205, 181, 275)
    else
        dev_set_part (30, 80, 30 + 2 * 48, 80 + 2 * 37)
    endif
    dev_display (Image)
    Message := 'Original image: ' + ImageFiles[Index - 1]
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    stop ()
    dev_display (ImageGuided)
    Message := 'Guided filter'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    dev_display (ImageBilateral)
    Message := 'Bilateral filter'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    dev_display (ImagePeronaMalik)
    Message := 'Perona-Malik anisotropic diffusion'
    dev_disp_text (Message, 'window', 12, 12, 'black', [], [])
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    * 比较执行时间
    Time := [TimeGuided,TimeBilateral,TimeAnisoDiff] * 1000 / Loops
    * 
    tuple_sort_index (Time, Indices)
    Colors := ['green','yellow','red']
    TimeMax := Time[Indices[2]]
    * 
    Width := 0.9 * ImageWidth * Time / TimeMax
    Row := [50,150,250]
    Column := gen_tuple_const(3,12)
    gen_rectangle1 (Rectangle, Row, Column, Row + 50, Column + Width)
    * 
    dev_clear_window ()

    dev_set_part (0, 0, ImageHeight - 1, ImageWidth - 1)
    dev_disp_text ('Execution times (' + ImageFiles[Index - 1] + ')', 'window', 12, 12, 'black', [], [])
    dev_disp_text (Methods + ': ' + Time$'.1f' + ' ms', 'image', Row + 55, Column, 'white', 'box', 'false')
    dev_set_color (Colors[Indices])
    dev_display (Rectangle)
    if (Index < |ImageFiles|)
        dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
        stop ()
    endif
endfor




--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864