欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中如何提高圖像質(zhì)量

 更新時間:2023年05月09日 10:03:06   作者:可樂大牛  
這篇文章主要介紹了python中如何提高圖像質(zhì)量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

python提高圖像質(zhì)量

概述

調(diào)研了一些提高圖像質(zhì)量的方式

  • 深度學(xué)習(xí)方法,如微軟的Bringing-Old-Photos-Back-to-Life的模型等。存在一些問題,首先是使用深度學(xué)習(xí)方法沒有剛好的模型,得在自己的數(shù)據(jù)集上微調(diào),比較麻煩,其次是帶來的推理時間開銷會比較大,不是特別劃算,畢竟只是一個小環(huán)節(jié)。
  • 商用API,發(fā)現(xiàn)百度智能云提供了很多這方面的API,調(diào)用相當(dāng)方便,但是免費次數(shù)有限啊。
  • 基于python自帶的PIL 實現(xiàn)圖片亮度增強、飽和度增強、對比度增強以及銳度增強。
  • 基于opencv實現(xiàn)數(shù)字圖像處理?。?!

百度智能云

官方教程:鏈接

參考代碼(方便的一塌糊涂):

from aip import AipImageProcess
import base64
import os
APP_ID = ''
API_KEY = ''
SECRET_KEY = ''
client = AipImageProcess(APP_ID, API_KEY, SECRET_KEY)
""" 讀取圖片 """
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()
def get_all_file(path):
    all_file=[]
    for i in os.listdir(path):
        file_name=os.path.join(path,i)
        all_file.append(file_name)
    return all_file
for img_path in get_all_file('img'):
    image = get_file_content(img_path)
    """ 調(diào)用圖像清晰度增強 """
    if not os.path.exists('output'):
        os.mkdir('output')
    response = client.imageDefinitionEnhance(image)
    imgdata = base64.b64decode(response['image'])
    file = open(os.path.join('output', img_path.split('\\')[-1]), 'wb')
    file.write(imgdata)
    file.close()

PIL實現(xiàn)

from PIL import Image
from PIL import ImageEnhance
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong'] # 設(shè)置字體以便正確顯示漢字
plt.rcParams['axes.unicode_minus'] = False # 正確顯示連字符
# 原圖
image = Image.open('img/timg.jpg')
# 亮度增強
enh_bri = ImageEnhance.Brightness(image)
brightness = 2
image_brightened = enh_bri.enhance(brightness)
# 色度增強(飽和度↑)
enh_col = ImageEnhance.Color(image)
color = 2
image_colored = enh_col.enhance(color)
# 對比度增強
enh_con = ImageEnhance.Contrast(image)
contrast = 2
image_contrasted = enh_con.enhance(contrast)
# 銳度增強
enh_sha = ImageEnhance.Sharpness(image)
sharpness = 4.0
image_sharped = enh_sha.enhance(sharpness)
fig,axes=plt.subplots(nrows=2,ncols=3,figsize=(10,8),dpi=100)
axes[0,0].imshow(np.array(image, dtype=np.uint8)[:,:,::-1])
axes[0,0].set_title("原圖")
axes[0,1].imshow(np.array(image_brightened, dtype=np.uint8)[:,:,::-1])
axes[0,1].set_title("亮度增強")
axes[0,2].imshow(np.array(image_colored, dtype=np.uint8)[:,:,::-1])
axes[0,2].set_title("飽和度增強")
axes[1,0].imshow(np.array(image_contrasted, dtype=np.uint8)[:,:,::-1])
axes[1,0].set_title("對比度增強")
axes[1,1].imshow(np.array(image_sharped, dtype=np.uint8)[:,:,::-1])
axes[1,1].set_title("銳度增強")
axes[1,2].imshow(np.array(image_sharped, dtype=np.uint8)[:,:,::-1])
axes[1,2].set_title("銳度增強")
plt.show()

opencv實現(xiàn)

鏈接

python實現(xiàn)圖像質(zhì)量評價準(zhǔn)則PSNR

計算PSNR的Python代碼,網(wǎng)上有下面兩種:

import cv2
import numpy as np
import math
def psnr1(img1, img2):
? ?mse = np.mean((img1 - img2) ** 2 )
? ?if mse < 1.0e-10:
? ? ? return 100
? ?return 10 * math.log10(255.0**2/mse)
def psnr2(img1, img2):
? ?mse = np.mean( (img1/255. - img2/255.) ** 2 )
? ?if mse < 1.0e-10:
? ? ? return 100
? ?PIXEL_MAX = 1
? ?return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))

理論上,這兩種計算方式都對應(yīng)上面的計算公式,在輸入圖像一樣的情況下,這兩段代碼的結(jié)果應(yīng)該是一樣的。

但是,在調(diào)用這段代碼的時候,我發(fā)現(xiàn)這兩者的結(jié)果卻相差很遠,同樣的圖片,psnr1的結(jié)果大概是29,而psnr2的結(jié)果是12。

gt = cv2.imread('1.jpg')
img= cv2.imread('2.jpg')
print(psnr1(gt,img))
print(psnr2(gt,img))

單看代碼的話完全看不出來任何問題,后來我輸出了這兩張圖像作差的結(jié)果,發(fā)現(xiàn)所有的值都是在0-255之間的,比如img1的一個像素值是30,img2的一個像素值是60,二者作差,本來應(yīng)該是-30,但是結(jié)果卻是226,即對于負值,輸出要加上256。

所以,問題就出在這行代碼上:

mse = np.mean((img1 - img2) ** 2 )

如果img1某個點的像素比img2小,而兩者差別又比較大,這個絕對值比較大的負值就會變成一個比較小的正值,MSE的結(jié)果也會偏小,那么PSNR的值就會偏大。

只要把上面那行代碼改成mse = np.mean((img1/1.0 - img2/1.0) ** 2 )就可以了。

最后,我們發(fā)現(xiàn)這兩個結(jié)果是一樣的了。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django框架自定義session處理操作示例

    Django框架自定義session處理操作示例

    這篇文章主要介紹了Django框架自定義session處理操作,結(jié)合實例形式分析了Django框架session操作的原理以及基于session的登陸、驗證等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python去除拼音聲調(diào)字母,替換為字母的方法

    python去除拼音聲調(diào)字母,替換為字母的方法

    今天小編就為大家分享一篇python去除拼音聲調(diào)字母,替換為字母的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法

    pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法

    今天小編就為大家分享一篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 查看端口并殺進程python腳本代碼

    查看端口并殺進程python腳本代碼

    今天小編就為大家分享一篇查看端口并殺進程python腳本代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 如何使用scrapy中的ItemLoader提取數(shù)據(jù)

    如何使用scrapy中的ItemLoader提取數(shù)據(jù)

    這篇文章主要介紹了如何使用scrapy中的ItemLoader提取數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 利用python做數(shù)據(jù)擬合詳情

    利用python做數(shù)據(jù)擬合詳情

    這篇文章主要介紹了利用python做數(shù)據(jù)擬合,下面文章圍繞如何讓利用python做數(shù)據(jù)擬合的相關(guān)資料展開詳細內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助
    2021-11-11
  • Python實現(xiàn)的樸素貝葉斯分類器示例

    Python實現(xiàn)的樸素貝葉斯分類器示例

    這篇文章主要介紹了Python實現(xiàn)的樸素貝葉斯分類器,結(jié)合具體實例形式分析了基于Python實現(xiàn)的樸素貝葉斯分類器相關(guān)定義與使用技巧,需要的朋友可以參考下
    2018-01-01
  • Python實現(xiàn)孤立隨機森林算法的示例代碼

    Python實現(xiàn)孤立隨機森林算法的示例代碼

    孤立森林(isolation?Forest)是一種高效的異常檢測算法,它和隨機森林類似,但每次選擇劃分屬性和劃分點(值)時都是隨機的,而不是根據(jù)信息增益或基尼指數(shù)來選擇。本文將用Python實現(xiàn)這一算法,需要的可以參考一下
    2022-03-03
  • Python OpenCV 圖像矯正的原理實現(xiàn)

    Python OpenCV 圖像矯正的原理實現(xiàn)

    這篇文章主要介紹了Python OpenCV 圖像矯正的原理實現(xiàn),檢測邊緣點;以邊緣點作為輸入,采用Hough直線檢測,檢測出最多點共線的四條直線,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • MoviePy簡介及Python視頻剪輯自動化

    MoviePy簡介及Python視頻剪輯自動化

    MoviePy是一個用于視頻編輯的Python模塊,可用于基本操作(如剪切、拼接、字幕插入)、視頻合成、視頻處理或創(chuàng)建高級效果等。本文給大家介紹MoviePy簡介及Python視頻剪輯自動化的相關(guān)知識,感興趣的朋友一起看看吧
    2020-12-12

最新評論