对于图像质量评价(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:

按失真类型分类整理TID2008的更多相关文章

  1. 按失真类型分类整理IQA数据集:TID2013

    前面已经整理了TID2008,这次整理TID2013的工作相对较简单,只需要改代码的一部分就可以了,首先我大概介绍一些TID2013. TID2013是TID2008的加强版,链接如下:http:// ...

  2. (zhuan) 126 篇殿堂级深度学习论文分类整理 从入门到应用

    126 篇殿堂级深度学习论文分类整理 从入门到应用 | 干货 雷锋网 作者: 三川 2017-03-02 18:40:00 查看源网址 阅读数:66 如果你有非常大的决心从事深度学习,又不想在这一行打 ...

  3. python基础——重访类型分类

    python基础--重访类型分类 对象根据分类来共享操作:例如,字符串.列表和元组都共享诸如合并.长度和索引等序列操作. 只有可变对象(列表.字典和集合)可以原处修改:我们不能原处修改数字,字符串.元 ...

  4. Android Studio 分类整理 res/layout 中的布局文件

    •准备工作 新建一个名为 TestLayouts 的项目: 进入 Project 模式: 来到 TestLayouts/app/src/main/res/layout 文件夹下: •分类整理 layo ...

  5. C++ //构造函数的分类及调用 //分类 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 //按照类型分类 普通构造 拷贝构造

    1 //构造函数的分类及调用 2 //分类 3 // 按照参数分类 无参构造函数(默认构造) 有参构造函数 4 //按照类型分类 普通构造 拷贝构造 5 6 #include <iostream ...

  6. DevOps开源工具的三种分类整理

    原文地址:http://www.360doc.com/content/16/0322/07/31263000_544210096.shtml 随着开发运维一体化的DevOps运动在国内外蓬勃发展,De ...

  7. .NET系列文章——近一年文章分类整理,方便各位博友们查询学习

    由于博主今后一段时间可能会很忙(准备出书:<.NET框架设计—模式.配置.工具>,外加换了新工作),所以博客会很少更新: 在最近一年左右时间里,博主各种.NET技术类型的文章都写过,根据博 ...

  8. 大量Python开源第三方库资源分类整理,含菜鸟教程章节级别链接

    Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明.因其具有丰富和强大的库,它常被称为胶水语言,能够把用其它语言制作的各种模块(尤其是C/C ...

  9. ACM/IOI 历年国家集训队论文集和论文算法分类整理

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率--从IOI98试题PICTURE谈起> 来煜坤:<把握本质,灵活运用--动态规划的深入探讨> 齐鑫:<搜索方法 ...

随机推荐

  1. HDU3518Boring counting(后缀自动机)

    Problem Description 035 now faced a tough problem,his english teacher gives him a string,which consi ...

  2. asp.net 打印控件使用方法

    打印的效果及控制性虽然不是很好,但是也能勉强使用,应付一般的打印还是 可以的了.代码如下所示: 代码 复制代码 代码如下: //调用PrintControl.ExecWB(?,?)实现直接打印和打印预 ...

  3. POJ3468:A Simple Problem with Integers

    浅谈分块:https://www.cnblogs.com/AKMer/p/10369816.html 题目传送门:http://poj.org/problem?id=3468 分块裸题.对于每个块记录 ...

  4. Makefile生成

    安装:sudo yum install automake使用: 1 运行autoscan生成两个文件:autoscan.log和configure.scan.将configure.scan重命名为co ...

  5. MSSQL2008 常用sql语句

    一.基础 1.说明:创建数据库 Create DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  6. scala 定时器

    假如我们要开发一个定时器,该定时器每秒钟执行一定的动作,我们如何把要执行的动作传给定时器?最直观的回答是:传一个实现动作的函数(function) object Helloworld { def on ...

  7. 经典SQL问题: 行转列,列转行

    情景简介 学校里面记录成绩,每个人的选课不一样,而且以后会添加课程,所以不需要把所有课程当作列.数据库grade里面数据如下图,假定每个人姓名都不一样,作为主键.本文以MySQL为基础,其他数据库会有 ...

  8. 开发环境无错,部署至测试环境报错“NoSuchMethodError”OR"NoSuchClassError"

    背景: 实现一个简单的功能,需要用到jedis的jar包连接Redis.在之前便已经有使用jedis,它的版本比较旧,是2.1的.而新实现的功能,在编码的时候使用的是2.8的.在开发环境完成单元测试后 ...

  9. Errors occurred during the build. Errors occurred during the build. Errors running builder 'JavaScript Validator' on XXX

    选择项目--右键Properties--Builders--如果有则取消第一项“JavaScript Validator”的勾. http://blog.csdn.net/error_case/art ...

  10. PowerDesignerPDM中搜寻表名或字段名

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...