图片去摩尔纹简述实现python代码示例

本文探讨了图片去摩尔纹的方法,通过Python实现,包括网络结构复现、数据预处理和模型训练。文章指出,通过Haar变换得到特征图,使用CNN处理下采样特征,对高低频信息分开处理,以解决翻拍图像中的摩尔纹问题。项目源码中对数据预处理进行了改进,将小波分解集成在线上进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章主要为大家介绍了图片去摩尔纹简述实现的python代码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

1、前言

当感光元件像素的空间频率与影像中条纹的空间频率接近时,可能产生一种新的波浪形的干扰图案,即所谓的摩尔纹。传感器的网格状纹理构成了一个这样的图案。当图案中的细条状结构与传感器的结构以小角度交叉时,这种效应也会在图像中产生明显的干扰。这种现象在一些细密纹理情况下,比如时尚摄影中的布料上,非常普遍。这种摩尔纹可能通过亮度也可能通过颜色来展现。但是在这里,仅针对在翻拍过程中产生的图像摩尔纹进行处理。

翻拍即从计算机屏幕上捕获图片,或对着屏幕拍摄图片;该方式会在图片上产生摩尔纹现象

论文主要处理思路

  • 对原图作Haar变换得到四个下采样特征图(原图下二采样cA、Horizontal横向高频cH、Vertical纵向高频cV、Diagonal斜向高频cD)
  • 然后分别利用四个独立的CNN对四个下采样特征图卷积池化,提取特征信息
  • 原文随后对三个高频信息卷积池化后的结果的每个channel、每个像素点比对,取max
  • 将上一步得到的结果和cA卷积池化后的结果作笛卡尔积

2、网络结构复现

  如下图所示,本项目复现了论文的图像去摩尔纹方法,并对数据处理部分进行了修改,并且网络结构上也参考了源码中的结构,对图片产生四个下采样特征图,而不是论文中的三个,具体处理方式大家可以参考一下网络结构。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

import math

import paddle

import paddle.nn as nn

import paddle.nn.functional as F

# import pywt

from paddle.nn import Linear, Dropout, ReLU

from paddle.nn import Conv2D, MaxPool2D

class mcnn(nn.Layer):

    def __init__(self, num_classes=1000):

        super(mcnn, self).__init__()

        self.num_classes = num_classes

        self._conv1_LL = Conv2D(3,32,7,stride=2,padding=1,)     

        # self.bn1_LL = nn.BatchNorm2D(128)

        self._conv1_LH = Conv2D(3,32,7,stride=2,padding=1,) 

        # self.bn1_LH = nn.BatchNorm2D(256)

        self._conv1_HL = Conv2D(3,32,7,stride=2,padding=1,)

        # self.bn1_HL = nn.BatchNorm2D(512)

        self._conv1_HH = Conv2D(3,32,7,stride=2,padding=1,)

        # self.bn1_HH = nn.BatchNorm2D(256)

        self.pool_1_LL = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self.pool_1_LH = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self.pool_1_HL = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self.pool_1_HH = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self._conv2 = Conv2D(32,16,3,stride=2,padding=1,)

        self.pool_2 = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self.dropout2 = Dropout(p=0.5)

        self._conv3 = Conv2D(16,32,3,stride=2,padding=1,)

        self.pool_3 = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self._conv4 = Conv2D(32,32,3,stride=2,padding=1,)

        self.pool_4 = nn.MaxPool2D(kernel_size=2,stride=2, padding=0)

        self.dropout4 = Dropout(p=0.5)

        # self.bn1_HH = nn.BatchNorm1D(256)

        self._fc1 = Linear(in_features=64,out_features=num_classes)

        self.dropout5 = Dropout(p=0.5)

        self._fc2 = Linear(in_features=2,out_features=num_classes)

    def forward(self, inputs1, inputs2, inputs3, inputs4):

        x1_LL = self._conv1_LL(inputs1)

        x1_LL = F.relu(x1_LL)

        x1_LH = self._conv1_LH(inputs2)

        x1_LH = F.relu(x1_LH)

        x1_HL = self._conv1_HL(inputs3)

        x1_HL = F.relu(x1_HL)

        x1_HH = self._conv1_HH(inputs4)

        x1_HH = F.relu(x1_HH)

        pool_x1_LL = self.pool_1_LL(x1_LL)

        pool_x1_LH = self.pool_1_LH(x1_LH)

        pool_x1_HL = self.pool_1_HL(x1_HL)

        p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值