- 积分
- 0
- 注册时间
- 2009-11-23
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 messenger 于 2009-12-30 04:15 编辑
基于MATLAB的图像数据提取
三石
摘要:MATLAB具有强大的图像处理功能,本文基于MATLAB编写图像处理程序,实现对图像数据的自动提取与输出,并达到较高精度。具有非常大的实际意义。
关键词:MATLAB;图像处理;数据提取
中图法分类号: 文件标识码:
1 题目来源
MATLAB具有强大的图像处理功能,可以通过编写m文件实现操作的标准化。由于学术研究需要,笔者每天要登陆中国天气网读取泰来24小时内的温度、湿度、风速方向数据,全部数据达96个,而这些数据在网页上显示为flash,只能通过点击显示数据后抄取,非常麻烦。因此希望通过MATLAB图像处理功能对所截取的曲线图进行分析,自动完成各时刻数据的提取,并达到足够精度。
2 技术路线
如图1[2]所示为所截取的某天24小时的温度变化曲线。可以看到,在各整点时刻,温度数据为一较大圆点,初步看来适合通过图像分析反算数据值。
图1 原始图像
2.1 原始图像读入
利用matlab命令imread()读入该图像,采用rgb2gray()将其转化为灰度图,如图2所示,为177*647的矩阵。分析该矩阵数据可以发现一些规律性的现象。如坐标轴刻度值,网格在矩阵中数据都有特定值。
图2 灰度图
2.2 图像滤波处理
2.2.1第一次滤波
由于网格值为221,第一次用阈值进行滤波,将阈值控制在10到110之间,得到图3。
图3 一次滤波图
2.2.2第二次滤波
从图3可以看到,滤波的结果将灰度图中的网格线去掉,并且数据线也只有在数据点附近有一些保留。为了只对数据点进行保留,需进行第二次滤波。此时数据点处具有表1所示规律性。
表1 某数据点灰度值
255
|
255
|
255
|
255
|
255
|
255
|
0
|
0
|
255
|
255
|
0
|
0
|
0
|
0
|
255
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
255
|
0
|
0
|
0
|
255
|
255
|
255
|
255
|
255
|
255
|
因此第二次滤波保留(i,j)=0&&(i-1,j)=0&&(i+1,j)=0&&(i,j-1)=0&&(i,j+1)=0的点位,得到图 4。
图4 二次滤波图
2.2.3第三次滤波
经过第二次滤波处理后还有部分点位处周边各点值为0,对其进行第三次处理:
if im3(i,j)==0
im4(i,j)=(im3(i,j)+im3(i-1,j)+ im3(i+1,j)+im3(i,j-1)+im3(i,j+1))*0.2;
end
if im4(i,j)>=0 && im4(i,j)<=51
im5(i,j)=0;
end
得到图 5:
图5 三次滤波图
2.3 记录灰度为0点的坐标
将上步得到图像中为0的点位坐标记录下来
if im5(i,j)==0
zuobiao(m,1)=i;
zuobiao(m,2)=j;
m=m+1;
end
得到的是25个点的坐标数据,输出到excel如表2所示:
表2 各时刻点位数据
点位
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
行
|
119
|
112
|
104
|
99
|
87
|
92
|
100
|
101
|
107
|
110
|
112
|
121
|
127
|
列
|
36
|
60
|
84
|
108
|
132
|
156
|
181
|
205
|
229
|
253
|
277
|
301
|
325
|
点位
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
|
行
|
127
|
132
|
135
|
137
|
134
|
127
|
124
|
117
|
112
|
109
|
104
|
99
|
|
列
|
350
|
374
|
398
|
422
|
446
|
470
|
495
|
519
|
543
|
567
|
591
|
615
|
|
2.4 坐标转换成温度数值
按照图像中行数与坐标轴刻度关系推算各点位置与所代表实际数值的对应关系,本图中wendu(n)=-((zuobiaoy(n)-18)/23*3+6),于是得到从图像上获取的各时刻的温度数据。对比从中国天气网上抄取的各时刻数据,可见误差在0.2摄氏度以内,精度比较高。
表3 各时刻点位数据
时刻
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
准确值
|
-19.1
|
-18.2
|
-17.2
|
-16.4
|
-14.8
|
-15.5
|
-16.6
|
-16.7
|
-17.5
|
-17.8
|
图像值
|
-19.2
|
-18.3
|
-17.2
|
-16.6
|
-15.0
|
-15.7
|
-16.7
|
-16.8
|
-17.6
|
-18.0
|
时刻
|
19
|
20
|
21
|
22
|
23
|
0
|
1
|
2
|
3
|
4
|
准确值
|
-18.2
|
-19.2
|
-20.0
|
-20.1
|
-20.7
|
-21.1
|
-21.4
|
-21.0
|
-20.1
|
-19.8
|
图像值
|
-18.3
|
-19.4
|
-20.2
|
-20.2
|
-20.9
|
-21.3
|
-21.5
|
-21.1
|
-20.2
|
-19.8
|
时刻
|
5
|
6
|
7
|
8
|
9
|
|
|
|
|
|
准确值
|
-18.8
|
-18.2
|
-17.8
|
-17.1
|
-16.4
|
|
|
|
|
|
图像值
|
-18.9
|
-18.3
|
-17.9
|
-17.2
|
-16.6
|
|
|
|
|
|
图6所示为自动提取的温度曲线与实际温度曲线的比较,可以看到两条曲线几乎没差别。
图6 温度曲线图
3 结论
通过以上分析及图像处理过程可以发现通过MATLAB对图像数据进行提取,可以达到较高精度,并且实现了数据的自动提取和输出。限于目前知识,本程序还有值得改进的地方,下一步研究希望实现网格区域的自动识别,然后在该区域内应用本程序,实现数据全自动的识别与输出。
参考文献:
[1] 张汗灵.MATLAB在图像处理中的应用. 清华大学出版.北京:2008
[2] 阎光伟,胡海涛.扫描图像中时序曲线的识别及数据提取. 计算机研究与发. 2007:251-256
[3] 张韫,刘冰,吴笛,张潇伊,杨芳,马宇晶.基于图像识别的心电监护数据提取技术. 医疗设备信息.2004:19卷11期
[4] 中国天气网泰来县天气数据
附录--Matlab源程序
clc;
clear all;
k=input('Enter the file name','s');
im=imread(k);
im1=rgb2gray(im);
[sx sy]=size(im1);
im2=zeros(sx,sy)+255;
for j=1:sy
for i=1:sx
if im1(i,j)>=10 && im1(i,j)<=110
im2(i,j)=0;
end
end
end
im3=zeros(sx,sy)+255;
for j=2:1:sy-1
for i=2:sx-1
if im2(i,j)==0 && im2(i-1,j)==0 && im2(i+1,j)==0 && im2(i,j-1)==0 && im2(i,j+1)==0
im3(i,j)=im2(i,j);
end
end
end
im4=zeros(sx,sy)+255;
for j=2:1:sy-1
for i=2:sx-1
if im3(i,j)==0
im4(i,j)=(im3(i,j)+im3(i-1,j)+ im3(i+1,j)+im3(i,j-1)+im3(i,j+1))*0.2;
end
end
end
im5=zeros(sx,sy)+255;
for j=2:1:sy-1
for i=2:sx-1
if im4(i,j)>=0 && im4(i,j)<=51
im5(i,j)=0;
end
end
end
m=1;
for j=2:1:sy-1
for i=2:sx-1
if im5(i,j)==0
zuobiao(m,1)=i;
zuobiao(m,2)=j;
m=m+1;
end
end
end
zuobiaox=[36 60 84 108 132 156 181 205 229 253 277 301 325 350 374 398 422 446 470 495 519 543 567 591 615];
zuobiaoy=[119 112 104 99 87 92 100 101 107 110 112 121 127 127 132 135 137 134 127 124 117 112 109 104 99];
for n=1:1:25
wendu(n)=-((zuobiaoy(n)-18)/23*3+6);
end
shijian=[9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 0 1 2 3 4 5 6 7 8 9];
figure,imshow(im1);
figure,imshow(im2);
figure,imshow(im3);
figure,imshow(im4);
figure,imshow(im5);
wenduzhun=[-19.1 -18.2 -17.2 -16.4 -14.8 -15.5 -16.6 -16.7 -17.5 -17.8 -18.2 -19.2 -20.0 -20.1 -20.7 -21.1 -21.4 -21.0 -20.1 -19.8 -18.8 -18.2 -17.8 -17.1 -16.4 ];
figure;
plot(wendu(:),'-','linewidth',1.5,'color',[1 0 0]);hold on;
plot(wenduzhun(:),'-','linewidth',1.5,'color',[0 0 1]);
xlabel('\rm(h)');
ylabel('\rm\circC');
set(gca,'xlim',[0 25]);
set(gca,'xtick',0:1:25);
set(gca,'XTickLabel',[9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 0 1 2 3 4 5 6 7 8 9]);
set(gca,'ylim',[-24 -6]);
set(gca,'ytick',-24:3:-6);
set(gca,'YTickLabel',[-24 -21 -18 -15 -12 -9 -6]);
xlswrite('数据提取.xlsx',wendu,'提取的温度','A1'); |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
评分
-
1
查看全部评分
-
|