对于图像质量评价(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. CodeForces - 154C:Double Profiles (hash+排序)

    You have been offered a job in a company developing a large social network. Your first task is conne ...

  2. Linux 修改PostgreSQL外部访问白名单

    1. 查找配置文件 # find / -name pg_hba.conf # find / -name postgresql.conf 2.修改 2.1 修改pg_hba.conf 查找IPv4 lo ...

  3. js中的点击事件(click)的实现方式

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. flask之flask_socketio

    js客户端发送 {'op':'descrip', 100} python服务端收到的为 dict, 回复客户端可以用emit(str(json.dumps(dict)), room=roomname) ...

  5. iOS 【资源篇】

    iOS9开发入门教程索引 Objective-C视频教程 O-c Blog 社区 畅游  http://www.9ria.com/ 苹果中文开发社区  http://www.cocoachina.co ...

  6. [转载]linux内核中的HZ介绍

    时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 <Linux/param.h>中定义或该文件包含的某个子平台相关文件中.作为通用 ...

  7. java代码继承super

    总结:多态 :. 当重写父类的方法的时,子类对象名可以调用父类的方法,以及不带参的构造方法 package com.addd; public class rr { int a, b; String c ...

  8. 校赛热身 Problem C. Sometimes Naive (状压dp)

    题解: 列举每一种3的倍数的组合,开始先求出3条边的可行解,则 六条边的可行解可以由两个三条边得来. 详见代码解析 #include<bits/stdc++.h> using namesp ...

  9. AngularJS:表单

    ylbtech-AngularJS:表单 1.返回顶部 1. AngularJS 表单 AngularJS 表单是输入控件的集合. HTML 控件 以下 HTML input 元素被称为 HTML 控 ...

  10. Intellij IDEA 发布后的项目在哪里

    Intellij IDEA 中使用 tomcat 并发布项目后,项目并没有出现在在 webapps 文件夹中,如果没有手动修改过部署目录的话,idea的真实部署目录为 File---->Proj ...