前面已經整理了TID2008,這次整理TID2013的工作相對較簡單,只需要改代碼的一部分就可以了,首先我大概介紹一些TID2013。
TID2013是TID2008的加強版,鏈接如下:http://www.ponomarenko.info/tid2013.htm。包括25幅參考圖像,3000幅失真圖像(25參考圖像X24種失真×5失真水平)。失真類型有24種,增加了包括:改變色彩飽和度、多重高斯噪聲、舒適噪聲、有損壓縮、彩色圖像量化、色差以及稀疏采樣。該數據庫的DMOS值由971觀察者給出524340個數據統計得到,MOS取值范圍為[0,9]。所有圖像都以Bitmap格式保存在數據庫中,沒有任何壓縮。
文件名命名方式:參考圖像號,失真類型,失真水平(“iXX_YY_Z.bmp”)。例如,名稱為“i05_11_4.bmp”是指第5個參考圖像,第11個類型的失真和與此失真相關的第4種水平。
分類整理過程跟之前的一樣,先建立一個存放整體新數據的文件夾,比如disimage_fenkai,然后在該文件夾中建立24個存放每類失真圖片和對應主觀評分的文件夾,再在每個失真文件夾中建立文本文檔存放主觀評分(分割源mos_with_names.txt文本),最后根據文本中的數據將失真圖片進行相應的分類。以下是詳細過程代碼:
1、新建disimage_fenkai,然后在該文件中建立24個用於存放每類失真的文件夾。
mkdir('./disimage_fenkai') for i =1:24 mkdir('./disimage_fenkai/',['#',num2str(i)]); end % 文件路徑中必須是斜杠不能是反斜杠 %.m文件的命名不能是mkdir,否則會報錯
2、在每個對應的文件夾中新建文本文檔用於存放每類失真圖片的主觀評分,然后將mos_with_names.txt文本中的文本按要求分割到每一個文本文檔中,對應的代碼如下:
%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('.\disimage_fenkai\#1\#1.txt','wt'); %必須要以wt的方式打開,不然不能換行 fid2=fopen('.\disimage_fenkai\#2\#2.txt','wt');fid3=fopen('.\disimage_fenkai\#3\#3.txt','wt'); fid4=fopen('.\disimage_fenkai\#4\#4.txt','wt');fid5=fopen('.\disimage_fenkai\#5\#5.txt','wt'); fid6=fopen('.\disimage_fenkai\#6\#6.txt','wt');fid7=fopen('.\disimage_fenkai\#7\#7.txt','wt'); fid8=fopen('.\disimage_fenkai\#8\#8.txt','wt');fid9=fopen('.\disimage_fenkai\#9\#9.txt','wt'); fid10=fopen('.\disimage_fenkai\#10\#10.txt','wt');fid11=fopen('.\disimage_fenkai\#11\#11.txt','wt'); fid12=fopen('.\disimage_fenkai\#12\#12.txt','wt');fid13=fopen('.\disimage_fenkai\#13\#13.txt','wt'); fid14=fopen('.\disimage_fenkai\#14\#14.txt','wt');fid15=fopen('.\disimage_fenkai\#15\#15.txt','wt'); fid16=fopen('.\disimage_fenkai\#16\#16.txt','wt');fid17=fopen('.\disimage_fenkai\#17\#17.txt','wt'); fid18=fopen('.\disimage_fenkai\#18\#18.txt','wt');fid19=fopen('.\disimage_fenkai\#19\#19.txt','wt'); fid20=fopen('.\disimage_fenkai\#20\#20.txt','wt');fid21=fopen('.\disimage_fenkai\#21\#21.txt','wt'); fid22=fopen('.\disimage_fenkai\#22\#22.txt','wt');fid23=fopen('.\disimage_fenkai\#23\#23.txt','wt'); fid24=fopen('.\disimage_fenkai\#24\#24.txt','wt'); while ~feof(fid) linenumber = linenumber + 1; line = fgetl(fid); if(line(12:15) == '_01_') %跟之前的失真類型的位置不一樣,因為TID2013的主觀評分的精度要高一位。 %disp([num2str(linenumber),':',line]); fprintf(fid1,[line,'\n']); elseif(line(12:15) == '_02_') fprintf(fid2,[line,'\n']); elseif(line(12:15) == '_03_') fprintf(fid3,[line,'\n']); elseif(line(12:15) == '_04_') fprintf(fid4,[line,'\n']); elseif(line(12:15) == '_05_') fprintf(fid5,[line,'\n']); elseif(line(12:15) == '_06_') fprintf(fid6,[line,'\n']); elseif(line(12:15) == '_07_') fprintf(fid7,[line,'\n']); elseif(line(12:15) == '_08_') fprintf(fid8,[line,'\n']); elseif(line(12:15) == '_09_') fprintf(fid9,[line,'\n']); elseif(line(12:15) == '_10_') fprintf(fid10,[line,'\n']); elseif(line(12:15) == '_11_') fprintf(fid11,[line,'\n']); elseif(line(12:15) == '_12_') fprintf(fid12,[line,'\n']); elseif(line(12:15) == '_13_') fprintf(fid13,[line,'\n']); elseif(line(12:15) == '_14_') fprintf(fid14,[line,'\n']); elseif(line(12:15) == '_15_') fprintf(fid15,[line,'\n']); elseif(line(12:15) == '_16_') fprintf(fid16,[line,'\n']); elseif(line(12:15) == '_17_') fprintf(fid17,[line,'\n']); elseif(line(12:15) == '_18_') fprintf(fid18,[line,'\n']); elseif(line(12:15) == '_19_') fprintf(fid19,[line,'\n']); elseif(line(12:15) == '_20_') fprintf(fid20,[line,'\n']); elseif(line(12:15) == '_21_') fprintf(fid21,[line,'\n']); elseif(line(12:15) == '_22_') fprintf(fid22,[line,'\n']); elseif(line(12:15) == '_23_') fprintf(fid23,[line,'\n']); elseif(line(12:15) == '_24_') fprintf(fid24,[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(fid18);fclose(fid19);fclose(fid20); fclose(fid21);fclose(fid22);fclose(fid23);fclose(fid24);fclose(fid);
結果如下:
3、根據文本中的數據將文件distorted_images中的3000張失真圖片進行相應的分類,將分類的圖片存到對應的失真類型文件夾中,代碼如下:
for i =1:24 file = ['.\disimage_fenkai\#',int2str(i),'\#',int2str(i),'.txt']; fid = fopen(file,'r'); disp(['Reading file: ',file]); while ~feof(fid) line = fgetl(fid); filename = line(9:20); %取出圖片名,注意現在的圖片名要往后移動一位(跟TID2008相比),因為TID2013的主觀評分精度高一位 A=imread(['.\distorted_images\',filename]); %按照圖片名讀取圖片 %mkdir('.\disimage_fenkai\#1\'); imwrite(A,['.\disimage_fenkai\#',int2str(i),'\',filename]); %將圖片按原名字存在#i中 end fclose(fid); end
分割的最后結果顯示如下:
所有代碼的.m文件放到跟下載的失真數據集distorted_images文件夾同一路徑下即可運行。如: