回 帖 发 新 帖 刷新版面

主题:[讨论]如何处理这些数据

我用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个回复)

沙发

如果这些点的坐标真的都是连续的,你可以检测第一点的坐标,和最后点的坐标,然后以字符串的形式输出就行了,比如:[num2str(40) num2str(xystart) ':' num2str(xyend) num2str(1)]

但我想有这种情况:
(40,80) (40,82)(40,84)(40,89)(40,91)这种情况,可能你所说的标志方法的优越性可能就没那么明显了

板凳


    我不存在你说的那种情况
    可是你说的检测第一个点和最后一个点是能编程自动完成的吗?
    我现在得到的一个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 楼

可以啊,你的数据存入一个(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 楼


请问你说的:“记录上一段,写入文件”的代码    要怎么写?
如何表示成1 47:49,55 1的形式呢?


5 楼

不好意思,我这段时间都忙乱了,很久没来这里。
我记得书影说过,用fprintf函数可以很轻松的输出字符串,而这个字符串大概可以这样表达
[num2str(40) num2str(xystart) ':' num2str(xyend) num2str(1)]

我没试过用sprinf,不过应该和c里的同名函数的用法差不多吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册