深度理解灰度图像形态学之腐蚀

自己学习使用,如有需要的朋友,可以学习一下,大神勿喷
1.本文仅针对灰度图像腐蚀,不针对区域腐蚀
2.本文研究所使用结构元素内部数据为某一定值
先上结论
一.自定义33结构元素,结构元素数据全为0,对灰度图像腐蚀结果为使用结构元素便利,结构元素区域内最小灰度值
二.使用默认3
3结构元素对灰度图像腐蚀,结果同1,说明默认结构元素数据全为0
三.自定义33结构元素,结构元素数据全为1,对灰度图像腐蚀结果为使用结构元素便利,结构元素区域内最小灰度值-1,即1的结果-1
四.自定义3
3结构元素,结构元素数据全为80,对灰度图像腐蚀结果为使用结构元素便利,结构元素区域内最小灰度值-80,即1的结果-80
五.自定义3*3结构元素,结构元素数据全为255,对灰度图像腐蚀结果为使用结构元素便利,结构元素区域内最小灰度值-255,即1的结果-255,所以结果全为0
六.由以上得出,灰度图像腐蚀后总体灰度值降低,所以腐蚀结果图像会比原图偏暗

以下为halcon实现代码
dev_close_window ()

创建原图 99
gen_image_const (Image, ‘byte’, 9, 9)
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)
生成随机数0-255,并将随机数设置成图像像素
tuple_rand (81, Rand)
Rand:=Rand
100
tuple_int (Rand, Int)
Int:=Int+120
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index*Cnt+Index1
set_grayval (Image, Index, Index1, Int[Pos])
endfor
endfor

*创建结构元素1 内部都是1

  • 1 1 1
  • 1 1 1
  • 1 1 1
    gen_image_const (ImageSE, ‘byte’, 3, 3)
    Cnt:=3
    for Index := 0 to Cnt-1 by 1
    for Index1 := 0 to Cnt-1 by 1
    Pos:=Index*Cnt+Index1
    set_grayval (ImageSE, Index, Index1, 1)
    endfor
    endfor

*创建结构元素2

  • 0 0 0
  • 0 0 0
  • 0 0 0
    gen_image_const (ImageSE1, ‘byte’, 3, 3)
    Cnt:=3
    for Index := 0 to Cnt-1 by 1
    for Index1 := 0 to Cnt-1 by 1
    Pos:=Index*Cnt+Index1
    set_grayval (ImageSE1, Index, Index1, 0)
    endfor
    endfor

*创建结构元素3

  • 255 255 255
  • 255 255 255
  • 255 255 255
    gen_image_const (ImageSE2, ‘byte’, 3, 3)
    Cnt:=3
    for Index := 0 to Cnt-1 by 1
    for Index1 := 0 to Cnt-1 by 1
    Pos:=Index*Cnt+Index1
    set_grayval (ImageSE2, Index, Index1, 255)
    endfor
    endfor

*创建结构元素4

  • 80 80 80
  • 80 80 80
  • 80 80 80
    gen_image_const (ImageSE3, ‘byte’, 3, 3)
    Cnt:=3
    for Index := 0 to Cnt-1 by 1
    for Index1 := 0 to Cnt-1 by 1
    Pos:=Index*Cnt+Index1
    set_grayval (ImageSE3, Index, Index1, 80)
    endfor
    endfor

*一:使用结构元素1腐蚀原图并显示前后像素对比
dev_display (Image)
gray_erosion (Image, ImageSE, ImageErosion)

显示腐蚀前后像素对比
dev_open_window (0, 0, 400, 640, ‘black’, WindowHandle1)
BeginRow:=10
BeginColumn:=10
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index
Cnt+Index1
get_grayval (Image, Index, Index1, Grayval)
Row:=BeginRow+Index30
Column:=BeginColumn+Index1
40
disp_message (WindowHandle1, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

Row:=Row+40
disp_line (WindowHandle1, Row, 0, Row, 640)

BeginRow:=Row+10
BeginColumn:=10
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=IndexCnt+Index1
get_grayval (ImageErosion, Index, Index1, Grayval)
Row:=BeginRow+Index
30
Column:=BeginColumn+Index1*40
disp_message (WindowHandle1, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor
stop ()

*二:使用结构元素2腐蚀原图并显示前后像素对比
dev_set_window (WindowHandle)
gray_erosion (Image, ImageSE1, ImageErosion1)

显示腐蚀前后像素对比
dev_open_window (0, 0, 400, 640, ‘black’, WindowHandle2)
BeginRow:=10
BeginColumn:=10
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index
Cnt+Index1
get_grayval (Image, Index, Index1, Grayval)
Row:=BeginRow+Index30
Column:=BeginColumn+Index1
40
disp_message (WindowHandle2, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

Row:=Row+40
disp_line (WindowHandle2, Row, 0, Row, 640)
BeginRow:=Row+10
BeginColumn:=10
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=IndexCnt+Index1
get_grayval (ImageErosion1, Index, Index1, Grayval)
Row:=BeginRow+Index
30
Column:=BeginColumn+Index1*40
disp_message (WindowHandle2, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor
stop ()

*三:使用结构元素3腐蚀原图并显示前后像素对比
dev_set_window (WindowHandle)
dev_display (Image)
gray_erosion (Image, ImageSE2, ImageErosion2)

显示腐蚀前后像素对比
dev_open_window (0, 0, 480, 640, ‘black’, WindowHandle3)
BeginRow:=10
BeginColumn:=10
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index
Cnt+Index1
get_grayval (Image, Index, Index1, Grayval)
Row:=BeginRow+Index30
Column:=BeginColumn+Index1
40
disp_message (WindowHandle3, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

Row:=Row+40
disp_line (WindowHandle3, Row, 0, Row, 640)

BeginRow:=Row+10
BeginColumn:=10
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=IndexCnt+Index1
get_grayval (ImageErosion2, Index, Index1, Grayval)
Row:=BeginRow+Index
30
Column:=BeginColumn+Index1*40
disp_message (WindowHandle3, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor
stop ()

*四:使用矩形结构元素腐蚀原图并显示前后像素对比
dev_set_window (WindowHandle)
dev_display (Image)
gray_erosion_rect (Image, ImageErosion3, 3, 3)

显示腐蚀前后像素对比
dev_open_window (0, 0, 480, 640, ‘black’, WindowHandle4)
BeginRow:=10
BeginColumn:=10
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index
Cnt+Index1
get_grayval (Image, Index, Index1, Grayval)
Row:=BeginRow+Index30
Column:=BeginColumn+Index1
40
disp_message (WindowHandle4, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

Row:=Row+40
disp_line (WindowHandle4, Row, 0, Row, 640)

BeginRow:=Row+10
BeginColumn:=10
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=IndexCnt+Index1
get_grayval (ImageErosion3, Index, Index1, Grayval)
Row:=BeginRow+Index
30
Column:=BeginColumn+Index1*40
disp_message (WindowHandle4, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

stop ()

*五:使用结构元素4腐蚀原图并显示前后像素对比
dev_set_window (WindowHandle)
dev_display (Image)
gray_erosion (Image, ImageSE3, ImageErosion4)

显示腐蚀前后像素对比
dev_open_window (0, 0, 480, 640, ‘black’, WindowHandle5)
BeginRow:=10
BeginColumn:=10
Cnt:=9
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=Index
Cnt+Index1
get_grayval (Image, Index, Index1, Grayval)
Row:=BeginRow+Index30
Column:=BeginColumn+Index1
40
disp_message (WindowHandle5, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

Row:=Row+40
disp_line (WindowHandle5, Row, 0, Row, 640)

BeginRow:=Row+10
BeginColumn:=10
for Index := 0 to Cnt-1 by 1
for Index1 := 0 to Cnt-1 by 1
Pos:=IndexCnt+Index1
get_grayval (ImageErosion4, Index, Index1, Grayval)
Row:=BeginRow+Index
30
Column:=BeginColumn+Index1*40
disp_message (WindowHandle5, Grayval, ‘window’, Row, Column, ‘red’, ‘true’)
endfor
endfor

stop ()

结果图片如下
深度理解灰度图像形态学之腐蚀