深度学习&图像处理(色彩编辑4)

1.YUV转换

YUV,是一种颜色编码方法。“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

YUV颜色模式的Y通道与UV是分离的,没有UV色度信号的话则表示黑白图像。YUV主要用于彩色视频的优化,被用在彩色电视系统中,可以兼容黑白电视,黑白电视和彩色电视在接受信号时不至于使黑白电视接收不到彩色电视的信号。

YUV不像RGB那样要求三个通道的信号同时传输,同时由于亮度信号和色度信号的分离,在图像色彩处理方面较为便利,而且可以与RGB图像相互转换。类似的颜色模式还有Lab模式,L表示亮度,ab表示色差,也是用三通道亮度与色差分离表示颜色的。

YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式。因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式。

                                                           

import tensorflow as tf  
import numpy as np
import os#通过os模块调用系统命令
import glob#文件名模式匹配,不用遍历整个目录判断每个文件是不是符合
import sys
def rgb2yuv(rgb):
    """
    将RGB图像转换为YUV
    """
    rgb2yuv_filter = tf.constant([[[[0.299, -0.169, 0.499],
                                    [0.587, -0.331, -0.418],
                                    [0.114, 0.499, -0.0813]]]])
    rgb2yuv_bias = tf.constant([0., 0.5, 0.5])
    temp = tf.nn.conv2d(rgb, rgb2yuv_filter, [1, 1, 1, 1], 'SAME')
    temp = tf.nn.bias_add(temp, rgb2yuv_bias)
    return temp


def yuv2rgb(yuv):
    """
    将YUV图像转换为RGB
    """
    yuv = tf.multiply(yuv, 255)
    yuv2rgb_filter = tf.constant([[[[1., 1., 1.],
                                    [0., -0.34413999, 1.77199996],
                                    [1.40199995, -0.71414, 0.]]]])
    yuv2rgb_bias = tf.constant([-179.45599365, 135.45983887, -226.81599426])
    temp = tf.nn.conv2d(yuv, yuv2rgb_filter, [1, 1, 1, 1], 'SAME')
    temp = tf.nn.bias_add(temp, yuv2rgb_bias)
    temp = tf.maximum(temp, tf.zeros(temp.get_shape(), dtype=tf.float32))
    temp = tf.minimum(temp, tf.multiply(tf.ones(temp.get_shape(), dtype=tf.float32), 255))
    temp = tf.div(temp, 255)
    return temp

相关解释见图像色彩化Python实现:https://blog.csdn.net/OpenSceneGraph/article/details/100731155

2.图像彩色化方法

常见方法:基于偏微分方程Sapiro、图像融合、图像分割

基于图像分割:首先对目标和参考图像各个像素点进行特征提取、分类,再使用超像素分割与直方图统计相结合的方法对分类结果图像进行优化,最后转换到 HSV 色彩空间中,进行对应的色彩传递。近年来结合图像分类器来优化图像分割后的分类结果再进行彩色化处理。

图像彩色化方法的未来研究可以有效地结合字典学习、稀疏表示的特点,也许能够更好地解决具有复杂的灰度图像彩色化问题。但此方法不能解决参考彩色图像的选择受用户的影响的问题,因此未来可以采取针对参考图像的选择实现自动客观化的算法。

不论是人工着色还是参考源图像的色彩迁移方法,其实现方法多是通过对目标图像进行分割、分块对应着色,应用偏微分方程将彩色化问题转化为最优解问题,借助图像融合、图像分类分割、深度学习和稀疏字典等技术手段实现图像的彩色化。

相比其他图像处理技术,图像彩色化方法的种类相对单一,而且彩色化过程中,很难达到彩色化的实时性和人眼视觉效果的双重要求,后期的研究可根据应用场景和算法的特点来选择优化图像彩色化方法,例如在监控应用中,需进行人脸识别、目标跟踪定位等稍高精度的图像处理的应用场景,建议选择借助图像融合、结合深度学习和稀疏表示的彩色化处理手段。当图像增强彩色化处理应用在车载系统、实时监控等图像处理实时性较高的场景,建议选择基于图像分割的彩色化方法。当需要对图像内容的细节处理要求较高时,建议优先选择借助偏微分方程的彩色化方法。总而言之,图像彩色化作为一种图像增强处理手段,提高图像彩色化的精确度、视觉效果以及图像分析时的精准应用始终是图像彩色化技术的终极和最基本目的。

以人眼直观视觉效果为主,客观数据以峰值信噪比、均方误差的大小等来衡量。

3.CNN中局部感知、参数共享、多卷积核以及池化操作

  • 局部感知:传统的神经网络中,每个人工神经元都要与图像中的每个像素想连接,这样就造成了需要大量权重的问题,使神经网络难以训练。但是在卷积神经网络中,每个神经元不需要和上一层所有神经元相连,只需与对应部分像素相连接,这样就能大量减少所需权重的数量。另外在图像中距离相近的像素相关性较大,采用局部感受设置步长对应距离远近,舍弃并不需要学习的权重,提高学习效率
  • 参数共享:通过一个卷积核只学习图像不同位置的相同特征,这样一组连接可以共享一个权重,对相同目标的特征提取都可以使用一个权重,这样就又减少了参数。
  • 多核卷积:第二个特征中说明了一个卷积核只学习部分特征,这就需要多核卷积学习图像中的不同特征来提取原图像的特征,在多核卷积中每个卷积核的大小应该是相同的。
  • 池化:又称“下采样”。池化层往往在卷积层后面,通过池化来降低卷积层输出的特征向量,同时改善过拟合现象。有最大池化和平均池化。

4.损失函数

损失函数分为经验风险损失函数和结构风险损失函数,经验风险损失函数反映的是预测结果和实际结果之间的差别,结构风险损失函数则是经验风险损失函数加上正则项(L0、L1(Lasso)、L2(Ridge))。

0-1损失:这种损失函数较为简单,当预测值与目标值不相等时为1,否则为0,用来记录分类错误的次数。

绝对值损失和平方损失常用于回归中。                                

对数损失函数常用于逻辑回归,样本预测值和实际值的误差符合高斯分布,使用极大似然估计的方法,取对数得到损失函数。

指数损失函数在boosting算法中比较常见。

5.深度学习训练算法:梯度下降法及其改进算法

梯度下降算法的主要思想是利用负梯度方向经过迭代找到当前函数的极小值。通俗得说就是找到函数变化率最大的位置往下走,反复进行这一过程直到函数收敛,就能找到当前待优化函数的最小值。

发布了40 篇原创文章 · 获赞 3 · 访问量 7604

猜你喜欢

转载自blog.csdn.net/OpenSceneGraph/article/details/100663485