这一次debug应该算的上,比较艰难困窘的一次。真挺难的,折磨了我一天多。前话不多讲,开始聊聊这次问题的产生与解决吧。老师让做图像分割与提取,然后再分类的工作,并且将其整合到一起。这个工作,我是分成两块来做的。先做分割与提取,还比较顺利。之后的特征提取与分类工作,做的还算行吧,但是测试用的图片采用的完整的大图。
在将这两块工作整合到一起的时候出现问题了,问题是哪儿呢。在区域提取的时候怎么着,都会报错,说在边缘提取的模块出现了NaN错误。然后我就找过去。哎。。。我就纳闷,开始测试的那些图片个个都挺好的,都能顺利提取出区块,为啥放到主函数就出错了呢。
然后我就开始假设,首先我猜想,应该是类型问题,为啥猜是这个问题呢。因为我将200多张图片都存到了cell类型里面了。可能在循环的时候读取不正确,导致报错。于是我在循环里面加入了一个临时变量,循环一次就将cell那一张图片矩阵赋值给临时变量,然后再进行区域提取的工作。结果还是不行。
再然后我猜想是不是数据量太大,毕竟两百张图片,有可能数据量太大,matlab直接就宕机,直接报错NaN,于是我就一个个地进行图片提取。结果还是报错。有意思的是这期间我还发现了另外的一个错误就是,开始我读取的图片都是在一个文件夹里面,顺带解决了一个逻辑错误。
然后我想这也不对,还有哪儿可能有错误呢。这个时候我发现一个有意思的事情,就是我一张一张图片测函数,结果发现有的图片没啥问题,有的图片直接就有错。这一下我就明白了。合计着原来是图片上的问题,于是我新建了一个文件夹,把一个工况下的图片放一起,单独用提取区域的函数来跑,果不其然,就是有图片出错,有图片直接就过了。后来再单独查看各个变量,发现一个变量里面会存在NaN,然后这个变量带入函数里面就出错了。找到问题的根源,我立马解决。说白了就是消除NaN留下其他有价值的值。
采用的是:
x_zhongxin(isnan( x_zhongxin)) = [];
y_zhongxin(isnan( y_zhongxin)) = [];
ct=length(y_zhongxin);
x_zhongxin是有NaN的向量。最终问题得到了解决。
happy,happy~
虽然写下来感觉没什么技术难度,但是当时被这个问题困扰的时候确实挺难受。大把大把的时间也没干嘛,就是盯着程序。不过debug了,感觉全身都舒爽了。