我目前正在我的一个项目中,我想使用卷积神经网络从图像中去除噪声。我说的是消除泊松型噪声。我正在使用的软件是Matlab 2018b。但是,按照this网站上的所有说明进行操作,结果却很糟糕。现在,我将大致解释其实现方式,并发布源代码,以希望有人指出我在哪里出错。
我首先创建了一个文件夹,其中包含从PASCAL VOC数据集中获取的少量训练图像。训练集包含40张图像,而我使用的是这么小的数据集,只是为了查看网络是否能够在使用完整的数据集进行训练之前产生任何有意义的结果。
我使用先前创建的带有训练图像的文件夹来制作imageDataStore,因此可以轻松访问所有图像
然后,使用for循环调整数据存储中所有图像的大小,将泊松噪声应用于所有图像,并将它们存储在名为X的文件夹中。原始图像存储在名为Y的文件夹中。
使用for循环,我将嘈杂的图像存储在名为X的4D数组中,尺寸为高度x宽度x通道x图像数。我对原始图像做了同样的事情,将4D数组称为Y。
经过验证的4D阵列,其中包含来自40个原始训练集中的十个图像。
使用matlab的dnCNNLayers函数定义ConvNet的层。我去了一个11层网络。可以找到here。
对于训练选项,我设置了“ sgdm”求解器,初始学习率为1e-7,最大历时为500,验证频率为5,我将其设置为使用我的GPU进行训练。
训练过程通过执行以下命令netPoisson=trainNetwork(X,Y,layers,options);
开始。这里X是包含嘈杂图像的4D数组,而Y包含所有原始图像。
在这一步中,我使用以下命令denoisedI=denoiseImage(noisyI, netPoisson);
在来自数据集的样本图像上测试网络,在这里我们可以看到原始图像,嘈杂图像以及应该是去噪的。
将嘈杂的图像与所谓的去噪图像相减会产生有点无噪点的图像,但这毫无意义。
所有这些的matlab代码为here。所有帮助将不胜感激。
关于, 埃米尔。