python 簡單的實現NRSS 無參考圖片質量檢測

NRSS 算法流程在這裏插入圖片描述

實現過程中的說明

在實現過程中發現如果步長設置的小,算法運行的特別慢,達不到性能要求啊,於是用等分圖片試了試。直接參考程序吧。

code

#encoding=utf-8

import cv2
import numpy as np
from skimage.measure import compare_ssim





def gauseBlur(img):
    img_Guassian = cv2.GaussianBlur(img,(7,7),0)
    return img_Guassian

def loadImage(filepath):
    img = cv2.imread(filepath, 0)  ##   讀入灰度圖
    return img


def showImage(img):
    cv2.imshow('image', img)
    cv2.waitKey(0)


def saveImage(path, img):
    cv2.imwrite(path, img)

def sobel(img):
    x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
    y = cv2.Sobel(img, cv2.CV_16S, 0, 1)

    absX = cv2.convertScaleAbs(x)  # 轉回uint8
    absY = cv2.convertScaleAbs(y)

    dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

    return dst

def getBlock(G,Gr):
    (h, w) = G.shape
    G_blk_list = []
    Gr_blk_list = []
    sp = 6
    for i in range(sp):
        for j in range(sp):
            G_blk = G[int((i / sp) * h):int(((i + 1) / sp) * h), int((j / sp) * w):int(((j + 1) / sp) * w)]
            Gr_blk = Gr[int((i / sp) * h):int(((i + 1) / sp) * h), int((j / sp) * w):int(((j + 1) / sp) * w)]
            G_blk_list.append(G_blk)
            Gr_blk_list.append(Gr_blk)

    sum = 0
    for i in range(sp*sp):
        mssim = compare_ssim(G_blk_list[i], Gr_blk_list[i])
        sum = mssim + sum

    nrss = 1-sum/(sp*sp*1.0)
    print(nrss)




def NRSS(path):
    image = loadImage(path)
    #高斯濾波
    Ir = gauseBlur(image)
    G = sobel(image)
    Gr = sobel(Ir)

    blocksize = 8
    ## 獲取塊信息
    getBlock(G, Gr)

if __name__ == "__main__":
    filepath = "F:\\testpic\\new\\blurtest\\clear\\3.jpg"
    NRSS(filepath)

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