今天嘞,9点实验室就位,10点开组会开到11点半,吃了饭溜回来接着上午那一道leetcode刷,说起来这个题,一个字,卧槽。。。
一、LeetCode第八题
要求。。。自己看吧太长了,理解题至少花了20min(我比较笨),主要就是按照他的乱七八糟一堆要求吧字符串转换为数字输出
首先要避免的几个坑,擅长使用string类的成员函数和属性来解题,而不要去用C语言的基础功能去找匹配空格匹配字符,直接遍历str找就完事儿了;要明白负数运算时候一定要想清楚现在的这个数字带不带负号,别人家带着负号,你还给乘-1,那就有点哈哈哈惹~还有就是要善用字符比大小的方式,具体字符比大小百度一下就好~
开始解题,最开始要想到的肯定是排除发生异常的输入数据,比如排除空格,排除空字符,排除非数字字符,这些工作都要在前面进行筛选,为后面的算法处理减小难度,具体处理如下所示:
if(str.size()==0)
{
return 0;
}
int i=0;
while(str[i]==' ')
i++;
int flag=1;
long long num=0;
if(str[i]=='+')
{
i++;
if(str[i]<'0'||str[i]>'9')
return num;
}
做完预处理工作,就开始正题,题目要求看见“-”就得留下来和后面数字连成结果输出,这里想了很久,开始想着输出形式为字符+数字的形式,但是写完发现。。。不符合要求那个纯数字输出的形式。后来想着检测到负号之后,吧后面的数字放进输出变量里面再乘-1,但是这样碰见后面有字母和空格的形式就不具有普适性。。。最后就直接用带符号相加的方法,达到了目的,也比较简洁(还是笨QAQ),最后把筛选出来的long long型变量和int数据类型的范围进行比较,防止超范围,代码如下:
if(str[i]=='-')
{
flag=-1;
i++;
if(str[i]<'0'||str[i]>'9')
return num;
}
if(str[i]<'0'||str[i]>'9')
return num;
while(str[i]!='\0'&&str[i]>='0'&&str[i]<='9')
{
num=num*10+flag*(str[i]-'0');
if (num > INT_MAX)
return INT_MAX;
else if (num < INT_MIN)
return INT_MIN;
i++;
}
一切算法题都是结果容易思考难。。。看了看也没写多少,但是2个多小时就没了。。。
二、基于3D结构光的缺陷检测
刚刚分到手的任务,开始老师让做特征提取,做了做发现只能用作图像预处理部分,现在从头开始用结构光相机来对零件进行缺陷检测。
结构光有主动投光和被动投光两种,被动式应用较窄,虽然受光源影响小,但是计算速度的缓慢,让我放弃了用被动式做实时检测的想法。主动投光的应用较多,但是需要自己去控制光源,通过向被测物体投射不同相移的编码面结构光,然后用CCD相机获取被物体面型调制后的面结构光强信息,再根据相位-坐标关系重建出物体表面的三维信息。
结构光三维测量有两种形式,一种是投影测量,一种是反射测量,具体用哪种测量方式。。。等买回来相机再测试一下吧。
相机选型方面,之前已经完成这个工作,需要确认一下,让老师买一个回来玩!
结构光检测缺陷方面,文章是真滴少,查阅了其他相关的文章,大概就是这么一个初步的思路:
1.选择好面结构光投射方向和区域,结构光如果打在了正常平整区域,那么就会没有偏折,如果打在了缺陷区域,如划痕,滑移线,麻点,凹坑,则会发生条纹的偏折,对比度也会有区分,待测物体表面的梯度变化会引起结构光相位的变化,通过梯度信息就可以看出缺陷信息
2.噪声影响势必很大,去噪,滤波也是必须要考虑到的
3.ROI区域,因为非必要区域很大,所以得想办法提取图像的ROI区域
4.图像增强方法也是要考虑的一点,例如直方图,锐化等等
5.最后最好可以通过二值化图像来判断
但是。。。识别思路有,分类思路怎么说。。。。QAQ继续找论文找思路
今天工作量比较少,晚上溜了!嘻嘻嘻