深度學習&圖像處理(色彩編輯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.深度學習訓練算法:梯度下降法及其改進算法

梯度下降算法的主要思想是利用負梯度方向經過迭代找到當前函數的極小值。通俗得說就是找到函數變化率最大的位置往下走,反覆進行這一過程直到函數收斂,就能找到當前待優化函數的最小值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章