在 Python 中运行 BM3D 去噪算法

信息处理 图像处理 Python 图片 opencv 去噪
2022-02-13 01:33:44

我正在寻找图像去噪的强大基线,因此希望在我的基准测试中使用BM3D算法。

这2个python实现:

已经很久没有维护了(第二个记录在我认为是中文的文件中)。我已经对第一个进行了一些试验,但没有得到满意的结果(请参阅https://github.com/ericmjonas/pybm3d/issues/11,其中包含不满意的修复,例如剪辑)。

这个包:https ://pypi.org/project/bm3d/#description ,没有容易找到的文档或源代码。

然后我在opencv的文档中找到了这个:https : //docs.opencv.org/master/de/daa/group__xphoto.html#ga2fc5a9661c1338a823fb3290673a880d,但没有说明如何使用它,也没有python中的示例。我看到了这个SO question,但它是针对 C++ 实现的,我不知道它会如何在 Python 中翻译,因为我对 opencv 一点也不熟悉。

2个回答

我所采用的是使用PyPI 包,这里有广告:http ://www.cs.tut.fi/~foi/GCF-BM3D/index.html#ref_software 。

我在源代码中挖掘了一下,发现我可以通过以下方式执行 BM3D:

import bm3d

denoised_image = bm3d.bm3d(image_noisy, sigma_psd=30/255, stage_arg=bm3d.BM3DStages.HARD_THRESHOLDING)

该库的源代码下载中也有一些示例

bm3d使用pip( pip install bm3d) 安装并需要 OpenBlas ( sudo apt-get install libopenblas-dev)。

如果您不想为 bm3d 使用 PyPI 包,您可以使用 ffmpeg 并将 bm3d 过滤器作为操作系统命令运行 -

command="ffmpeg -i "+input_image_path+" -filter_complex bm3d=sigma=30/255:block=4:bstep=2:group=1:hdthr=10000:estim=basic /path/to/output/directory/output.png"    
os.system(command)

这需要更少的计算时间。