按失真类型分类整理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命名,确实比较蠢,手动粘贴复制了几个就放弃了,还是写程序可能要快些。百度之后,修修改改最后的代码是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | %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类图片都操作了就好了。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具