按失真類型分類整理TID2008


      對於圖像質量評價(IQA)數據庫,TID2008算是不大不小的數據集了。TID2008是由烏克蘭國家航空航天大學的N504信號接收、傳輸與處理系建立,包括25幅參考圖像,1700幅失真圖像。失真類型有17種包括:加性高斯噪聲、顏色分量強於照明分量的加性噪聲、空間位置相關噪聲、掩膜噪聲、高頻噪聲、脈沖噪聲、量化噪聲、高斯模糊、圖像噪聲、JPEG壓縮、JPEG2000壓縮、JPEG傳輸錯誤、JPEG2000傳輸錯誤、非偏心式噪聲、不同強度的局部塊失真、強度均值偏移以及對比度變化。該數據庫的DMOS值由838觀察者給出256428個數據統計得到,MOS取值范圍為[0,9]。下載鏈接如下:http://www.ponomarenko.info/tid2008.htm,從作者那里下載得到的所有失真圖像是統一放在distorted_images文件夾中的,而對應的主觀評價分數是放在mos_with_names.txt文本中的,如果是用算法對所有失真進行評分當然很方便,但是很多時候需要預測單獨失真圖像,比如說只想要用程序預測高斯模糊失真圖像的分數,然后與對應的主觀評分進行比較。因此,我想把distorted_images中的失真圖像按照失真類型進行分類,分為17類,每一類存到一個單獨的文件夾中,然后在文件夾中順便放上對應的主觀評分。

1、將mos_with_names.txt這個文件夾存的內容按失真類型分割,因為它的命名方式是這樣的:

參考圖像號,失真類型,失真水平:“iXX_YY_Z.bmp”。

      例如,名稱為“i03_08_4.bmp”是指第3個參考圖像,第8個失真類型和與此失真相關的第4種水平。同樣地,名稱為“i12_10_1.bmp”指這是第12個參考圖像,第10個類型的失真與第一種失真水平。

     所以做起來也沒那么復雜,本來想手動的, 每種失真類型建立一個文件夾,文件夾中建立一個txt來保存數據,首先我手動建立了17個文件夾,以#1到#17命名,確實比較蠢,手動粘貼復制了幾個就放棄了,還是寫程序可能要快些。百度之后,修修改改最后的代碼是這樣的:

%filename = '.\mos_with_names.txt';
 %[vale,name] = textread(filename , '%f %s');
 clc; clear
 
file = '.\mos_with_names.txt';
fid = fopen(file,'r');
disp(['Reading file: ',file]);
linenumber = 0;
fid1=fopen('.\#1.txt','wt'); %必須要以wt的方式打開,不然不能換行
fid2=fopen('.\#2.txt','wt');fid3=fopen('.\#3.txt','wt');
fid4=fopen('.\#4.txt','wt');fid5=fopen('.\#5.txt','wt');
fid6=fopen('.\#6.txt','wt');fid7=fopen('.\#7.txt','wt');
fid8=fopen('.\#8.txt','wt');fid9=fopen('.\#9.txt','wt');
fid10=fopen('.\#10.txt','wt');fid11=fopen('.\#11.txt','wt');
fid12=fopen('.\#12.txt','wt');fid13=fopen('.\#13.txt','wt');
fid14=fopen('.\#14.txt','wt');fid15=fopen('.\#15.txt','wt');
fid16=fopen('.\#16.txt','wt');fid17=fopen('.\#17.txt','wt');
while ~feof(fid) 
    linenumber = linenumber + 1;
    line = fgetl(fid); 
    if(line(11:14) == '_01_')
%disp([num2str(linenumber),':',line]);
        fprintf(fid1,[line,'\n']);
    elseif(line(11:14) == '_02_')
        fprintf(fid2,[line,'\n']);
    elseif(line(11:14) == '_03_')
        fprintf(fid3,[line,'\n']);
    elseif(line(11:14) == '_04_')
        fprintf(fid4,[line,'\n']);
    elseif(line(11:14) == '_05_')
        fprintf(fid5,[line,'\n']);
    elseif(line(11:14) == '_06_')
        fprintf(fid6,[line,'\n']);
    elseif(line(11:14) == '_07_')
        fprintf(fid7,[line,'\n']);
    elseif(line(11:14) == '_08_')
        fprintf(fid8,[line,'\n']);
    elseif(line(11:14) == '_09_')
        fprintf(fid9,[line,'\n']);
    elseif(line(11:14) == '_10_')
        fprintf(fid10,[line,'\n']);
    elseif(line(11:14) == '_11_')
        fprintf(fid11,[line,'\n']);
    elseif(line(11:14) == '_12_')
        fprintf(fid12,[line,'\n']);
    elseif(line(11:14) == '_13_')
        fprintf(fid13,[line,'\n']);
    elseif(line(11:14) == '_14_')
        fprintf(fid14,[line,'\n']);
    elseif(line(11:14) == '_15_')
        fprintf(fid15,[line,'\n']);
    elseif(line(11:14) == '_16_')
        fprintf(fid16,[line,'\n']);
    elseif(line(11:14) == '_17_')
        fprintf(fid17,[line,'\n']);
        
    end
end 

fclose(fid1);fclose(fid2);fclose(fid3);fclose(fid4);
fclose(fid5);fclose(fid6);fclose(fid7);fclose(fid8);
fclose(fid9);fclose(fid10);fclose(fid11);fclose(fid12);
fclose(fid13);fclose(fid14);fclose(fid15);fclose(fid16);
fclose(fid17);fclose(fid);

  這個代碼比較簡單,很多重復性的代碼,反正能實現要求也就懶得改了,運行之后在當前文件夾下生成17個txt文件,每個文件包含一類失真圖像的名字和主觀評分,然后把這些txt手動放到之前建立好的文件夾下就可以了。

2、根據txt中的名字將對應的圖片從distorted_images中提取出來放到對應的失真類型中去,這個工作其實也不算復雜,因為失真文件夾中的文本中已經有該類失真圖片的名字了,直接打開txt文本取出文件名,根據文件名到distorted_images中讀取圖片,然后保存到對應的文件夾中,最后再用循環把17類圖片都操作了就好了。代碼如下:

for i =1:17
    file = ['.\disimage_fenkai\#',int2str(i),'\#',int2str(i),'.txt'];
    fid = fopen(file,'r');
    disp(['Reading file: ',file]);
    while ~feof(fid) 

        line = fgetl(fid); 
        filename = line(8:19); %取出圖片名
        A=imread(['.\distorted_images\',filename]);  %按照圖片名讀取圖片 
        %mkdir('.\disimage_fenkai\#1\');
        imwrite(A,['.\disimage_fenkai\#',int2str(i),'\',filename]); %將圖片按原名字存在#i中
    end
    fclose(fid);

end

  這個程序可以直接將distorted_images中的失真圖片按照失真類型存到對應的失真文件夾中,方便以后操作。最后的效果如下:

 

 任意打開一個文件夾,存放的是對應的失真類型,比如打開#4:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM