implementing erosion, dilation in C, C++

后端 未结 4 1043
陌清茗
陌清茗 2021-02-06 06:23

I have theoretical understanding of how dilation in binary image is done.

AFAIK, If my SE (structuring element) is this

0 1
1 1. 

wher

4条回答
  •  梦谈多话
    2021-02-06 06:45

    Perhaps a better way to look at it is how to produce an output pixel of the dilation. For the corresponding pixel in the image, align the structuring element such that the origin of the structuring element is at that image pixel. If there is any overlap, set the dilation output pixel at that location to 1, otherwise set it to 0.

    So this can be done by simply looping over each pixel in the image and testing whether or not the properly shifted structuring element overlaps with the image. This means you'll probably have 4 nested loops: x img, y img, x se, y se. So for each image pixel, you loop over the pixels of the structuring element and see if there is any overlap. This may not be the most efficient algorithm, but it is probably the most straightforward.

    Also, I think your example is incorrect. The dilation depends on the origin of the structuring element. If the origin is...

    at the top left zero: you need to shift the image (-1,-1), (-1,0), and (0,-1) giving:

    1 1 1 0 0
    1 1 0 0 0
    1 1 0 0 0
    1 0 0 0 0
    0 0 0 0 0 
    

    at the bottom right: you need to shift the image (0,0), (1,0), and (0,1) giving:

    0 0 0 0 0
    0 1 1 1 0
    0 1 1 0 0
    0 1 1 0 0
    0 1 0 0 0
    

    MATLAB uses floor((size(SE)+1)/2) as the origin of the SE so in this case, it will use the top left pixel of the SE. You can verify this using the imdilate MATLAB function.

提交回复
热议问题