05-图像纹理恢复

05-图像纹理识别

计算机视觉之纹理

一幅图像的纹理是在图像计算中经过量化的图像特征。图像纹理描述图像或其中小块区域的空间颜色分布和光强分布。纹理特征的提取分为基于结构的方法和基于统计数据的方法。一个基于结构的纹理特征提取方法是将所要检测的纹理进行建模,在图像中搜索重复的模式。该方法对人工合成的纹理识别效果较好。但对于交通图像中的纹理识别,基于统计数据的方法效果更好。

CNN的卷积操作是以滑窗方式操作,充当局部特征提取器。输出的特征图保存了输入图片的相对的空间排列。再将得到的全局有序的特征级联送到FC层做分类, 这样的框架在图像分类,目标识别等获得巨大成功。但是这不适用于纹理识别,因为纹理识别需要描述特征分布的空间不变表示而不是级联。

  1. 每个像素点形成一个纹理描述。

    找到纹理基元,纹理基元通常是由子元素构成的(点和条形),可以使用不同方向、尺度、相位的滤波寻找子元素,再通过找到的子元素的近邻来描述图像中的每个点(高斯滤波可实现)

  2. 池化纹理表示

    如果直接使用基于局部的特征表示构建图像区域的特征,向量维数太大了;如果通过直方图表示区域特征的话,cell个数太多了,因为每个像素的纹理表示多少有些不同。

在纹理处理中一般有三个基本问题:

  • 纹理分割把图片分成不同的部分,每部分内部具有相近的纹理问题
  • 纹理合成寻找如何利用小范例图像构造大片纹理区域的方法
  • 纹理恢复形状包括由图像纹理恢复表面的方向和表面的形状。
格拉姆矩阵

来自知乎 90后后生:Gram Matrix实际上可看做是feature之间的偏心协方差矩阵(即没有减去均值的协方差矩阵),在feature map中,每一个数字都来自于一个特定滤波器在特定位置的卷积,因此每个数字就代表一个特征的强度,而Gram计算的实际上是两两特征之间的相关性,哪两个特征是同时出现的,哪两个是此消彼长的等等,同时,Gram的对角线元素,还体现了每个特征在图像中出现的量,因此,Gram有助于把握整个图像的大体风格。有了表示风格的Gram Matrix,要度量两个图像风格的差异,只需比较他们Gram Matrix的差异即可。

来自知乎阳仔的下午茶:gram矩阵用在风格迁移的话,举个简单的例子吧,我是这么理解的:

比如有一张写实图片,内容是狗坐在草地上,如果单看这张图片,两个毫不相干的物体(例如狗的头和草地上的一棵草的联系,对应gram矩阵的话就是feature map中狗头的channel和草的channel的内积)我们是看不出来有什么联系的,事实上gram矩阵中大部分的元素都是这样的(很多元素是人类看起来毫不相干的两个channel特征的内积)。但是如果有一张卡通图片,也是狗在草地上,这时刚刚写实图片里狗头和草地上的草的联系我们就有所对照,就可以得出一个结论了,也即他们的联系就是他们都是写实的,而在卡通图上面他们的联系就是他们都是卡通的。

也就是说这种联系就只能是风格了,所以如果能使得两张图片的gram矩阵一致,应该是可以使得其风格大概一致的。

来自CSDN Sun7_She

gram矩阵是计算每个通道I的feature map与每个通道j的feature map的内积。

gram matrix的每个值可以说是代表i通道的feature map与j通道的feature map的互相关程度。

一言以蔽之:格拉姆矩阵抽取到的是:在图片同一位置下,不同特征之间的组合。

总结常用的损失函数
  • Content Loss

    Content Loss衡量content activation map与原始content image之间的差别

    L c = w c ∗ ∑ i , j ( F i j − P i j ) L_{c} = w_{c}*\sum_{i,j}(F_{ij} - P_{ij}) Lc=wci,j(FijPij)

    def content_loss(weight, current, original):
        loss = weight * tf.reduce_sum((current - original)**2)
        return loss
    

    因为我们要计算feature之间的误差,所以直接计算了feature的L2 Loss.

  • Style Loss

    我们要如何衡量生成图片与style 图片之间在style上的差别呢? 这是机器学习的一个很重要的思想, 使用一些数学参数来衡量我们想要衡量的指标, 从而产生一个可优化的Loss。我们用图像feature map的feature neuron之间的相关性来代表图像的“风格”, 那么, 生成图片与style image之间的“风格”差异就可以用所有像素之间的相关性值的L2 Loss来表示。如何表达所有像素两两之间的相关性呢, 这里, 我们用feature map的neuron之间的correlation相关系数来表达这种误差, 称之为gram map. 对于任意两个通道, 我们计算这两个通道之间每个元素的乘积(C*C), 这代表了这两个通道之间的相关性, 共有H*W这么多个这样的C*C矩阵, 求这些矩阵的均值, 就代表了两张图所有通道之间的相关性gram map.

    def gram_matrix(features, normalize=True):
        shape = tf.shape(features)
        features_reshaped = tf.reshape(features, (shape[1]*shape[2], shape[3]))
        gram = tf.matmul(tf.transpose(features_reshaped), features_reshaped)
        if normalize:
            gra
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值