一 為什麼對視頻編碼圖像質量客觀評價

    視頻圖像質量主觀評價一般採用連續雙激勵質量度量法對任一觀測者連續給出原始視頻圖像和處理過的失真圖像,由觀測者根據主觀感知給出分值,其需針對多個視頻對象進行多次重複實驗,耗時多、費用高,難以操作;而視頻編碼圖像的客觀評價早期主要採用峯值信噪比(PSNR)或均方差(MSE)衡量視頻序列的失真度,雖然其具有操作簡單、成本低、易於實現的特點,但是由於其忽略了圖像內容對人眼的影響,不能完整地反映出圖像的質量。所以現實中還是多以主觀評價方式為主的,碼率影響視頻請晰度,但是這也是在兩個碼率比較懸殊的兩個視頻序列的畫質才可以被人眼比較明顯感知到,否則很難定定量衡量碼率提升帶來的視頻畫質的提升效益。如何讓視頻圖像質量客觀評價方法產生的結果逼近主觀評價結果進而定量衡量視頻圖像質量,為此近些年出現了多種基於結構化、人眼生理特徵建立的視覺感知模型與統計算法的客觀評價方法。

二 都有哪些視頻編碼圖像質量客觀評價(限於有全參考圖像即FR)的方法

  •  PSNR
  •  NQM
  •  UQI
  •  SSIM
  •  MS-SSIM
  •  IFC
  •  VIF
  •  VSNR
  •  IW-SSIM
  •  RFSIM
  •  FSIM

三 都有哪些評估視頻編碼圖像質量客觀評價方法的優劣的方法

  •  SROCC
  •  KROCC
  •  PLCC
  •  RMSE

四 為測試視頻編碼圖像質量客觀評價方法相應算法都有哪些圖像模型庫

  • TID2013
  • TID2008
  • CSIQ
  • LIVE
  • IVC
  • MICT
  • WIQ
  • A57

五 以TID2013來看看哪個方法評價視頻圖像質量最牛

fer圖像分類_視頻編碼

 

備註:* Spearman correlation即SROCC

         * Kendall  correlation即KROCC

         * FSIMc是同時計算色度的FSIM

         * 由此可以看出在這些評價算法中最接近主觀評價分值的是FSIM,所以下面我們以該方法定量衡量不同編碼參數對編碼出的圖像質量的影響。

六 如何使用FSIM

    官網地扯:http://www4.comp.polyu.edu.hk/~cslzhang/IQA/FSIM/FSIM.htm,算法以matlab語言實現,所以使用前要先裝matlab,然後在matlab命令窗口先用imread加載一個參考圖像與一個相應的扭曲圖像,然後調用FeatureSIM進行特值相似度值的計算,值越高説明後者圖像質量越高。使用方法示例如下:

    

fer圖像分類_視頻編碼_02

七 封裝FSIM便於批量處理

  1. 枚舉某一目錄下所有圖像文件函數
function [Status, FileList] = EnumPRefDir( RefDir )
%EnumPRefDir 枚舉某一保存參考圖片的目錄獲取其中的所有參考圖像文件
% 枚舉目錄(排除子目錄包括.或..)
% 輸入參數
% refdir 被枚舉的目錄
% 輸出參數
% Status 為0表示文件列表為空,1非空
% FileList 文件列表
% 調用示例
% [Status, FileList] = EnumPRefDir( 'RefDir' );



%FileList{1} = 'a111.txt';
%FileList{2} = 'a112.txt';

if ~exist(RefDir, 'dir')
    strerr = ['目錄', RefDir, '不存在'];
    disp(strerr);
end    

DirList=dir(RefDir);
FileListIndex = 1;
Status=0;
FileList{FileListIndex}=char('empty');
for DirListIndex=1:length(DirList)
    if ~DirList(DirListIndex).isdir
        FileList{FileListIndex} = char(DirList(DirListIndex).name);
        FileListIndex = FileListIndex + 1;
        Status=1;
    end
end

end
  1. 調用FSIM計算兩個文件夾中的圖片從而生成相似度列表文件
function Status = FSIMBetweenTwoFileFolder( RefDir, DecodeDir )
%FSIMBetweenTwoFileFolder 調用FSIM計算兩個文件夾中的圖片從而生成相似度列表文件
% 基於參考與解碼文件夾計算這些文件夾中相應圖片的相似度
% Tip:兩個文件夾中的文件命名方式相同,比如RefDir/P000001與RefDir/P000001
% 輸入參數
% RefDir 參數圖片文件夾
% DecodeDir 解碼圖片文件夾
% 輸出參數
% Status 為0出現錯誤(比如文件夾為空或兩個文件夾圖片命方式不同或數量不同) 
% 為1全部文件都經過了正確的相似度計算
% 輸出相似度列表文件
% RefDir+DecodeDir+'FSIM.txt',其行格式為:圖片文件名 + ' ' + 相似度值 + ' ' + 相似度值c
% 調用示例
%  Status = FSIMBetweenTwoFileFolder('RefDir', 'DecodeDir1');

Status = 1;
if ~exist(RefDir, 'dir') ||  ~exist(DecodeDir, 'dir')
    strerr = ['目錄', RefDir,'或',DecodeDir, '不存在'];
    disp(strerr);        
    Status = 0;
    return;
end    




SListFileName = strcat(RefDir, '_');
SListFileName = strcat(SListFileName, DecodeDir);
SListFileName = strcat(SListFileName, '_FSIM.txt');

try
    [FStatus, FileList] = EnumPRefDir( RefDir );
    
    if(FStatus == 0)
        Status = 0;
        return;
    end   
    
    SListFileID = fopen(SListFileName, 'w');
    if(SListFileID < 0)
        Status = 0;
        return;
    end
        
     
      
    for FIndex = 1 : length(FileList)
        OneRefFileName =['', RefDir, '/', char(FileList(FIndex))];        
        OneDecodeFileName = ['', DecodeDir, '/', char(FileList(FIndex))];
        
        if ~exist(OneRefFileName, 'file') || ~exist(OneDecodeFileName, 'file')
            Status = 0;
            break;
        else
            try
            OneRefFileHandle = imread(OneRefFileName);
            OneDecodeFileHandle = imread(OneDecodeFileName);            
            [FSIM, FSIMc] = FeatureSIM(OneRefFileHandle, OneDecodeFileHandle);            
            fprintf(SListFileID, '%s %f %f\r\n', char(FileList(FIndex)), FSIM, FSIMc);
            catch rme
                disp(rme.message);
                Status = 0;
                break;
            end
        end
    end   

    fclose(SListFileID);    
catch eme     
    disp(eme.message);
    Status = 0;
end
    if ~Status
        delete(SListFileName);
    end
end
  1. 驅動函數
function FSIMDriver( RefDir,DecodeDir1, DecodeDir2 )
%FSIMDriver FSIM相似度計算主驅動程序
% FSIM相似度計算主驅動程序
% 説明
% 跟據目前的需求,主要基於編碼前圖像目錄(RefDir)與兩種不同編碼參數相應的
% 兩類解碼圖像目錄(DecodeDir1與DecodeDir2)計算圖像特徵相似度,從而比較不同的編碼參數的效果
% 輸入參數
% RefDir 保存編碼前圖像文件的文件夾名稱,默認值是當前目錄下的‘RefDir’
% DecodeDir1 保存解碼後圖像文件的文件夾名稱,默認值是當前目錄下的‘DecodeDir1’
% DecodeDir2 保存解碼後圖像文件的文件夾名稱(DecodeDir1與DecodeDir2中的圖像文件編碼參數不同),默認值是當前目錄下的‘DecodeDir2’

% 輸出參數
% 無
% 調用示例
% FSIMDriver();

	narginchk(0, 3);
    nargoutchk(0, 0);


    if nargin < 3
        DecodeDir2='DecodeDir2';
    end

    if nargin < 2
       DecodeDir1='DecodeDir1';
    end

    if nargin < 1
        RefDir='RefDir';
    end    
    
    try
        ErrorCode = FSIMBetweenTwoFileFolder(RefDir, DecodeDir1);  
        disp(['基於目錄',RefDir,'與', DecodeDir1, '計算圖像特徵相似度', GetErrorDisp( ErrorCode )]);
        
        ErrorCode = FSIMBetweenTwoFileFolder(RefDir, DecodeDir2);
        disp(['基於目錄',RefDir,'與', DecodeDir2, '計算圖像特徵相似度', GetErrorDisp( ErrorCode )]);
    catch tme
        disp(tme.message);
    end
end

function ErrorDisp = GetErrorDisp( ErrorCode )
    if ErrorCode
        ErrorDisp = '成功';
    else
        ErrorDisp = '失敗';
    end    
end
  1. 生成可執行文件 在matlab命令窗口輸入以下命令,這樣就可以在當前目錄下的子目錄target生成了FSIMDriver.exe:
    mkdir target
    mcc -m -d target FSIMDriver
  2. 在沒有安裝matlab的用户機如何運行FSIMDriver,首先在matlab命令窗口調用mcrinstaller顯示如下找到mcrinstaller.exe的位置,在用户機通過該程序安裝matlab運行時,然後在window命令行窗口即可運行FSIMDriver.exe。
  3. FSIMDriver.exe需要三個命令行參數,分別為保存編碼前圖像文件的目錄名稱、兩個保存解碼後的圖像文件的目錄(這兩個目錄中的圖像文件是由不同編碼參數所編碼視頻序列解碼後的圖像文件且這兩個目錄中的文件名稱與編碼前保存的圖像文件的名稱一樣)。

八 總結

    由於視頻圖像序列場景不停在變化,所有圖像質量評價方法包括FSIM在定量衡量編碼之後的圖像失真度還是存在一定侷限性,不過作為一個方向還是值得關注的。