(1)图像摩尔纹缺陷的原理;(2)给出理论解释;(3)给出可行的技术解决方案并尝试实现。

(1)分析引起图一所示图像摩尔纹缺陷的原理;(2)给出理论解释;(3)给出可行的技术解决方案并尝试实现。

1摩尔纹缺陷原理

摩尔效应指两个重叠的线条形态所产生的干扰中生成的一种波纹团。是摩尔纹感光元件上容易出现的一种高频干扰,会使画面出现彩色的高频条纹。这种现象在拍摄有规律排列的物体时尤为明显,比如图一织物上的纹理,平行线或网状结构,特别容易出现彩色水波纹。并且不规则地出现。

摩尔纹是物理的叠加原理所产生的一种现象,是两条线或两个物体之间以固定的角度和频率发生干涉后产生的视觉效果,也就是不同物体之间发生了波形干涉现象。当拍摄纤维非常密集的衣物时,相机传感器的成像元件图像与布料的衣物纹路图像之间干扰,达到一定的角度,摩尔纹的现象就会出现。

条纹密集、小格子、纹路过于清晰的的材质或者结构最容易出现这个问题。对于这种类型的场景,当采样率和原始图片频率不同步时就很可能出现摩尔纹。 

2摩尔纹缺陷理论解释

一个正弦信号经过采样之后,只要采样率必须大于等于奈奎斯特采样频率,而这个采样率是此连续信号中最高频分量频率的两倍,就完全可以通过这些采样点恢复出原始信号。但要是采样频率不足,就无法知道采样点到底是哪个频率信号产生的,这种现象叫做信号的混叠,由此产生的条纹称作为摩尔纹。

摩尔纹的出现是因为在数字图像采样过程中,当采样频率不足够但是很接近能够捕捉到原始的图片细节时,得到的高频干扰的条纹,它会使图片出现彩色的高频率不规则条纹。另外当采样方向和原始图像的纹理方向有一定夹角时也会得到摩尔纹。当两组周期相近的直条纹叠加在一起时,就有可能产生一组更大周期的干涉条纹,这组干涉条纹就是摩尔纹,它的周期是两组条纹周期的最小公倍数。

当两个相似,重复的线条,圆圈或点的图案与不完美的对齐重叠时,会出现一个新的动态图案。这种新模式称为摩尔纹,可能涉及多种颜色。当两个原始图案相对于彼此移动时,摩尔纹改变其元素的形状和频率。摩尔纹是大规模干涉图案。为了发生这种干涉图案,两个原始图案不能完全对齐。摩尔纹放大了错位。两种原始图案之间最轻微的错位可能会产生大规模,易于看见的摩尔纹。随着未对准程度的增加,摩尔纹的频率也可能增加。

 

如在上图中,白色圆点代表采样点,黑色条纹代表被采样的图像,左侧的图像的纹理和采样的方向呈一定程度的夹角,同时采样的频率和原始图像的频率接近,我们假定一个样本内黑色的部分超过其面积的一半则采样得到的结果为黑色,反之则为白色。在两者的叠加部分,可以清晰地看到数条较粗的条纹,这些条纹称为摩尔纹。在拍摄如纤维非常密集的衣物时,相机的成像元件图样与衣物纹路图像有可能会重叠,摩尔纹的现象就会出现。

3技术解决方案

  1. 通过倾斜相机的角度、变更相机的焦距可在一定程度上减轻摩尔纹,因为波形是否叠加与传递距离有关;这会改变采样的方向和广义的原始图像空间频率。可以避免波形的相互叠加,抵消掉摩尔纹。
  2. 增加采样率或者对图像进行平滑滤波,去除一些高频信息,然后再进行采样,来消除混叠,减少摩尔纹。增加两者之间的空间频率差。当镜头分辨率远小于感光元件的空间频率时,可以完全消除摩尔纹。
  3. 在相机的镜头中加入低通滤波器,以使得采样频率能够大于滤波后图像的奈奎斯特采样频率,即过滤出信号中的高频部分。尽管用该方法能够减轻摩尔纹,但拍摄出照片的锐度则会大大降低,损害成像质量。

4.使深度学习去除摩尔纹干扰

 

使用卷积神经网络(cnn)来直接学习摩尔纹图像到对应的干净图像之间的映射。这类方法需要大量的成对并严格对齐的带摩尔纹的图片和干净图片的数据集来训练网络。下图是收集的数据集,其中训练集702张图片,验证集300张图片。

 

搭建好网络后,打印出网络的一些关键信息,如下图所示。

if __name__ == '__main__':
    x = torch.randn(16, 3, 256, 256).to(device) # b, c, h, w
    #ca_model = CoordAtt(inp=16,oup=16)
    y = net(x).to(device)
    print("输出尺寸",y.shape)

    网络结构的一些参数,输入数据和输出数据形状相同。

图像输入为256*256*3,输出也是256*256*3,网络由RELU非线性激活函数、卷积、反卷积等结构组成。输入图像首先经过一些列的升维,再通过五个下采样和上采样的并行结构,最后叠加输出。

  1. 网络中通过步长为2的卷积核来代替池化操作,用来缩小图片尺寸。
  2. 下采样过程使用3*3卷积核,步长为1,用了五个卷积层模块。下图是网络中下采样部分的函数模块,。
 def conv_block(self, channels):
        convs = [nn.Conv2d(channels, channels, 3, 1, 1), nn.ReLU(True)] * 5
        return nn.Sequential(*convs)

输⼊图像通过⽹络提取特征后,输出的尺⼨往往会变⼩,若需要将图像恢复到原来的尺⼨以便进⾏进⼀步的计算,整个扩⼤图像尺⼨,实现图像由⼩分辨率到⼤分辨率的映射的操作,叫做上采样,反卷积是上采样的⼀种⽅式,反卷积也叫转置卷积。在反卷积过程中,增大了图像大小和分辨率,最后将上采样后的部分通过叠加完成输出。下图是网络中上采样部分的函数模块。

    def up_conv_block(self, *channels):
        layer_nums = len(channels) - 1
        up_convs = []
        for num in range(layer_nums):
            up_convs += [nn.ConvTranspose2d(channels[num], channels[num + 1], 4, 2, 1), nn.ReLU(True)]
        up_convs += [nn.Conv2d(32, 3, 3, 1, 1)]
        return nn.Sequential(*up_convs)

这样,粗尺度和细尺度的图像,经过神经网络处理,可以去除低频与高频分量的摩尔纹。开始训练,加载自定义的数据集,训练样本总共702张,batch-size为16,初始学习率为0.001,使用GPU进行训练。训练轮数为20轮。

 

下图为结束时训练和验证最后两轮的损失值:

将训练好的权重文件保存到 moire_best.pth 文件中(保存损失最小的权重)

 

通过训练,使网络学习由摩尔纹图像到干净图像之间的映射关系。最终实现输入带摩尔纹的图片,网络对摩尔纹实现去除,输出相应干净图片的过程。可以看出,在20轮训练结束后,从曲线中可看出,训练损失在逐步的降低,当达到16轮时,达到收敛,增加轮数误差不再下降。验证损失在第15轮之前并没有有效的下降,在15轮之后,迅速下降收敛达到较低的损失范围。

 

测试部分,图像相似性评价指标,PSNR峰值信噪比,用于衡量两张图像之间差异,例如压缩图像与原始图像,评估压缩图像质量;复原图像与ground truth,评估复原算法性能等。PSNR 最小值为 0,PSNR 越大,两张图像差异越小。判断条件是如果两张图片的均方误差小于0.1,赋值100,如果不满足条件赋值10*log(1/mse)代码部分如下:

def psnr(img1, img2):
    mse = np.mean((img1 - img2) ** 2)
    if mse <= 0.1:
        return 100
    return 10 * math.log10(1 / mse)

运行结果如下,测试的18张图片中有64%的数据能够达到近似拟合。

  代码部分参考:

图像摩尔纹缺陷的原理以及可行的技术解决方案-数据集文档类资源-CSDN下载

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小小的土拨鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值