主题:[讨论]如何处理这些数据
lily婕
[专家分:40] 发布于 2008-10-31 10:25:00
我用MATLAB处理了一个视频文件,将它分为每帧图象,处理后得到图象中各点的坐标和颜色值,最后把这些数据都保存在TXT文件中,特别是因为很多点具有相同的颜色
就是例如(40,80)(40,81)(40,82)……(40,100)的颜色值都为1,显示为40,80,1 40,81,1 40,82,1 …… 40,100,1
因此TXT文件中的数据量很大,那么能否将TXT文件中以上的变为40,80:100,1的形式呢?
用MATLAB能否实现?还是要用其他的软件实现?
请高手指点,谢谢
回复列表 (共5个回复)
沙发
永恒的回忆 [专家分:810] 发布于 2008-11-02 22:36:00
如果这些点的坐标真的都是连续的,你可以检测第一点的坐标,和最后点的坐标,然后以字符串的形式输出就行了,比如:[num2str(40) num2str(xystart) ':' num2str(xyend) num2str(1)]
但我想有这种情况:
(40,80) (40,82)(40,84)(40,89)(40,91)这种情况,可能你所说的标志方法的优越性可能就没那么明显了
板凳
lily婕 [专家分:40] 发布于 2008-11-04 09:50:00
我不存在你说的那种情况
可是你说的检测第一个点和最后一个点是能编程自动完成的吗?
我现在得到的一个TXT文件,里面的数据量很大,每一行由4个数字组成,例如
1 47 55 1,分别表示第一幅图,X坐标是47,Y坐标是55,颜色代码为1
第二行为1 48 55 1
第三行为1 49 55 1
我是希望能够变成 1 47:49,55 1
我先将TXT文件中的数据导入MATLAB中,变成MAT格式,那么如何将其中的XY的值提取出来处理呢?
3 楼
永恒的回忆 [专家分:810] 发布于 2008-11-06 13:46:00
可以啊,你的数据存入一个(n,5)的矩阵data里,第五列用来记录该行与前一行情况的关系(是x不同y相同,还是x相同y不同),然后逐行扫描
分四种情况记录
1)图片号,颜色相同,两行间x相同,y不同
2)图片号,颜色相同,两行间y相同,x不同
3)图片号,颜色相同,两行间x,y都不同
4)图片号,或颜色不相同
当状态发生转移时,就立即记录该行的行号,其上一行作为前一阶段的最后一点,该行行号作为下一阶段的开始点。
这四种情况根据你的数据排列方式的不同,可能1),2)情况中有一种不会出现,这个具体分析
实现方面,类似这样的语句吧
a=data(1,:);
data(:,5)=0;
nstart=1;
for i=2:n
if data(i,1)==a(1) & data(i,4)==a(4)
if data(i,2)==data(i-1,2) & data(i,3)~=data(i-1,3)
data(i,5)=1;
elseif data(i,2)~=data(i-1,2) & data(i,3)==data(i-1,3)
data(i,5)=2;
else
data(i,5)=3;
end %%给数据做标记,放在第5列
if data(i,5)~=data(i-1,5) & data(i-1)~=0
nend=i-1;
%这里加入“记录上一段,写入文件”的代码
nstart=i;
end
else
nend=i-1;
%这里加入“记录上一段,写入文件”的代码
nstart=i;
end
end
当然如果具体情况下数据的排列有一定规律,比如是先按x增加,再按y增加等,就不会出现第二种情况,这样的话把x放在外循环,y在内循环,就好了,免去了做标记和这么多判断的工作
4 楼
lily婕 [专家分:40] 发布于 2008-11-10 11:00:00
请问你说的:“记录上一段,写入文件”的代码 要怎么写?
如何表示成1 47:49,55 1的形式呢?
5 楼
永恒的回忆 [专家分:810] 发布于 2008-11-15 23:27:00
不好意思,我这段时间都忙乱了,很久没来这里。
我记得书影说过,用fprintf函数可以很轻松的输出字符串,而这个字符串大概可以这样表达
[num2str(40) num2str(xystart) ':' num2str(xyend) num2str(1)]
我没试过用sprinf,不过应该和c里的同名函数的用法差不多吧
我来回复