日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python实现快速的风格迁移

發(fā)布時間:2023/12/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python实现快速的风格迁移 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • 一、什么是風(fēng)格遷移?
    • 二、風(fēng)格遷移算法實(shí)現(xiàn)步驟
    • 三、風(fēng)格遷徙算法代碼實(shí)現(xiàn)
    • 四、代碼運(yùn)行流程
    • 五、風(fēng)格遷徙算法效果展示與分析
    • 六、思維擴(kuò)展
    • 參考資料
    • 注意事項(xiàng)

一、什么是風(fēng)格遷移?

??所謂的遷移比較簡單,即輸入包含兩個圖片,一張source圖片,一張target圖片,風(fēng)格遷移的目的是將source圖片上面的色彩遷移到target圖像中,從而形成一張新的圖片,它在現(xiàn)實(shí)場景中具有較多的應(yīng)用,比較經(jīng)典的應(yīng)用是手機(jī)照相機(jī)中的濾鏡。下面展示了一張樣例圖片。

二、風(fēng)格遷移算法實(shí)現(xiàn)步驟

  • 步驟1-輸入source和target圖像。源圖像包含希望目標(biāo)圖像模擬的顏色空間。在上面的實(shí)例中,左側(cè)的日落圖像是源圖像,中間的圖像是目標(biāo)圖像,右側(cè)的圖像是應(yīng)用于目標(biāo)的源的顏色空間;
  • 步驟2-將source圖像和target圖像轉(zhuǎn)換為LAB*顏色空間。LAB顏色空間模型的感知均勻性,其中少量的顏色值變化也應(yīng)產(chǎn)生相對相等的顏色重要性變化。LAB顏色空間在模仿人類如何解釋顏色方面比標(biāo)準(zhǔn)的RGB顏色空間做得更好,正如您將要看到的,它在顏色轉(zhuǎn)換方面具有很好的效果;
  • 步驟3-將source圖像和target圖像的通道劃分開來
  • 步驟4-計(jì)算source圖像和target圖像的每個LAB*通道的平均值和標(biāo)準(zhǔn)偏差
  • 步驟5-從目標(biāo)通道中減去目標(biāo)圖像的LAB*通道的平均值
  • 步驟6-按目標(biāo)圖像的標(biāo)準(zhǔn)偏差除以源圖像的標(biāo)準(zhǔn)偏差,再乘以目標(biāo)通道的比例縮放目標(biāo)通道
  • 步驟7-加上source圖像的LAB*通道的均值
  • 步驟8-將處理后的值變換到[0,255]的范圍內(nèi)
  • 步驟9-將source圖像和target圖像的通道合并起來
  • 步驟10-從LAB顏色空間變換回RGB空間

三、風(fēng)格遷徙算法代碼實(shí)現(xiàn)

# coding=utf-8# 導(dǎo)入python包 import cv2 import argparse import numpy as npdef color_transfer(source, target):# 從RGB空間轉(zhuǎn)換到LAB空間中source = cv2.cvtColor(source, cv2.COLOR_BGR2LAB).astype("float32")target = cv2.cvtColor(target, cv2.COLOR_BGR2LAB).astype("float32")# 計(jì)算source和target圖像的統(tǒng)計(jì)信息,即均值和方差等(lMeanSrc, lStdSrc, aMeanSrc, aStdSrc, bMeanSrc, bStdSrc) = image_stats(source)(lMeanTar, lStdTar, aMeanTar, aStdTar, bMeanTar, bStdTar) = image_stats(target)# 將目標(biāo)圖像的L、a、b通道劃分開來并減去對應(yīng)的均值(l, a, b) = cv2.split(target)l -= lMeanTara -= aMeanTarb -= bMeanTar# 分別對L、a、b通道進(jìn)行標(biāo)準(zhǔn)化操作l = (lStdTar / lStdSrc) * la = (aStdTar / aStdSrc) * ab = (bStdTar / bStdSrc) * b# 加上均值l += lMeanSrca += aMeanSrcb += bMeanSrc# 將處理的結(jié)果限制在[0,255]的空間內(nèi)l = np.clip(l, 0, 255)a = np.clip(a, 0, 255)b = np.clip(b, 0, 255)# 將L、a、b通道合并起來并將其轉(zhuǎn)化回RGB顏色空間transfer = cv2.merge([l, a, b])transfer = cv2.cvtColor(transfer.astype("uint8"), cv2.COLOR_LAB2BGR)# 返回最終的變換結(jié)果return transferdef image_stats(image):# 計(jì)算每一個通道的均值和方差值(l, a, b) = cv2.split(image)(lMean, lStd) = (l.mean(), l.std())(aMean, aStd) = (a.mean(), a.std())(bMean, bStd) = (b.mean(), b.std())# 返回對應(yīng)的統(tǒng)計(jì)信息return (lMean, lStd, aMean, aStd, bMean, bStd)if __name__ == '__main__':ap = argparse.ArgumentParser()ap.add_argument("-s", "--source", required = True, help = "Path to the source image")ap.add_argument("-t", "--target", required = True, help = "Path to the target image")args = vars(ap.parse_args())source = cv2.imread(args["source"])target = cv2.imread(args["target"])taransform = color_transfer(source, target)source1 = cv2.resize(source, target.shape[0:2])target1 = cv2.resize(target, target.shape[0:2])taransform1 = cv2.resize(taransform, target.shape[0:2])result = np.hstack([source1, target1, taransform1])cv2.imwrite("transform4.png", result)cv2.imshow("transform", result)cv2.waitKey(0)

四、代碼運(yùn)行流程

  • 步驟1-打開一個cmd界面;
  • 步驟2-cd /d xxx 切換到代碼所在的路徑,xxx表示代碼的具體路徑
  • 步驟3-python color_transform.py -s source.jpg -t target.jpg 執(zhí)行代碼,默認(rèn)會保存結(jié)果到當(dāng)前路徑中。

五、風(fēng)格遷徙算法效果展示與分析


??上圖展示了該算法的風(fēng)格遷移效果。每一行表示一個測試樣本,第1行表示的是source圖像,其主要提供色彩空間信息;第2列表示的是target圖像,其主要提供內(nèi)容;第3列表示風(fēng)格遷徙的結(jié)果,即將source的風(fēng)格遷徙到target中,形成了一幅新的圖像,這個效果其實(shí)就類似于美顏工具中的濾鏡,哈哈,看了這篇文章你也能自己開發(fā)一個自己的濾鏡庫啦。

六、思維擴(kuò)展

??該算法是思路是2001年提出的,整個算法具有速度快和效果好的優(yōu)點(diǎn),該算法具有一個缺點(diǎn),即它依賴于全局顏色統(tǒng)計(jì),因此具有相似像素強(qiáng)度值的大區(qū)域會顯著影響平均值(從而影響整體顏色傳遞)。為了很好的解決這個缺點(diǎn),我們可以從以下的兩個方面進(jìn)行改進(jìn)。

  • 改進(jìn)思路1-計(jì)算源圖像在一個較小的感興趣區(qū)域(ROI)中的平均值和標(biāo)準(zhǔn)偏差,你希望模擬其顏色,而不是使用整個圖像。采用這種方法將使您的平均值和標(biāo)準(zhǔn)偏差更好地表示您想要使用的顏色空間。
  • 改進(jìn)思路2-將k-均值聚類算法應(yīng)用到這兩個圖像中。你可以對LAB*顏色空間中每個圖像的像素強(qiáng)度進(jìn)行聚類,然后使用歐幾里得距離確定兩個圖像之間最相似的質(zhì)心。然后只計(jì)算每個區(qū)域內(nèi)的統(tǒng)計(jì)信息。同樣,這將使平均值和標(biāo)準(zhǔn)偏差產(chǎn)生更“局部”的影響,并有助于緩解全球統(tǒng)計(jì)數(shù)據(jù)的過度表示問題。當(dāng)然,缺點(diǎn)是這種方法明顯較慢,因?yàn)槟悻F(xiàn)在已經(jīng)添加了一個昂貴的集群步驟。

參考資料

[1] 參考鏈接
[2] 參考論文鏈接

注意事項(xiàng)

[1] 該博客是本人原創(chuàng)博客,如果您對該博客感興趣,想要轉(zhuǎn)載該博客,請與我聯(lián)系(qq郵箱:1575262785@qq.com),我會在第一時間回復(fù)大家,謝謝大家的關(guān)注.
[2] 由于個人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進(jìn)意見。
[3] 如果您在閱讀本博客時遇到不理解的地方,希望您可以聯(lián)系我,我會及時的回復(fù)您,和您交流想法和意見,謝謝。
[4] 本文測試的圖片可以通過該鏈接進(jìn)行下載。網(wǎng)盤鏈接- 提取碼:vuxv。
[5] 本人業(yè)余時間承接各種本科畢設(shè)設(shè)計(jì)和各種小項(xiàng)目,包括圖像處理(數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等)、matlab仿真、python算法及仿真等,有需要的請加QQ:1575262785詳聊!!!

總結(jié)

以上是生活随笔為你收集整理的Python实现快速的风格迁移的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。