在一些图像处理项目中,有时需要对图像进行腐蚀膨胀和各种值处理,引入opencv处理后,数据无法进行快速的值处理,如值域截取、使用mask、where操作等。因此,可以使用torch实现腐蚀膨胀,从而避免对数据结构的修改,同时保证了在一个模型内实现所有操作。(当然,opencv中的值域截取也是可以很方便的,具体可以参考以下链接中的第七节c++上opencv的常用数组操作_a486259的博客-CSDN博客)
但是,基于torch实现的腐蚀膨胀,有一定的假设前提:所有的结构元素都为方形算子。实现后可以作用于C++下的libtorch中,但是ksize的尺寸只能是固定的,无法变动输入。在实际使用中,图像是否二值图,不会影响结果。只是会选择算子对应区域中值最大的元素进行替代。
核心代码:
#ksize必须为奇数,否则池化后的尺寸会发生变化。此外,stride=1, padding=int((ksize-1)/ 2)也是必须的 ksize=21 max_pool = torch.nn.MaxPool2d(kernel_size=ksize, stride=1, padding=int((ksize-1)/ 2)) #可调整kernel_size
膨胀操作
膨



