码迷,mamicode.com
首页 > 其他好文 > 详细

按失真类型分类整理TID2008

时间:2018-12-25 23:38:03      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:target   位置   for   ted   不同   mat   img   出图   pen   

      对于图像质量评价(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个类型的失真与第一种失真水平。“i17.bmp”表示,这是无失真的17个参考图像。

     所以做起来也没那么复杂,本来想手动的, 每种失真类型建立一个文件夹,文件夹中建立一个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:

技术分享图片

 

按失真类型分类整理TID2008

标签:target   位置   for   ted   不同   mat   img   出图   pen   

原文地址:https://www.cnblogs.com/libai123456/p/10176896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!