pww区域连接特征提取算法

主题思想:
任何一个图像 肯定由多个或一个区域
每个区域在横向扫描时 会有分裂和合并 比如圆环 顶部有一个分裂点 底部有一个合并点
没有分裂合并的图形 就是简单的凸图像
很容易通过外形识别
而复杂的图像 就是凹的 就需要分裂合并点来识别
旋转30度 60度 90度 120,150 得到的分裂合并点序列是不同的 可以通过分析分裂合并点可以获得角点

区域连接特征:
重心和中心的偏置对宽高的比例 和方向
分裂合并点位置 和重心位置的比例 除以区域面积
亮度和区域面积的比
重心的偏移方向 与新图片的grvDirect相减=基准数据 基准数据+特征点的方向==新特征点方向
如果图形复杂 需要使用决策树内嵌 svm 最近邻等等算法来综合分析分裂合并特征点
如果简单 基本就区域特征搞定了

图像特征:
合并区域,求图像重心,根据图像重心和中心的角度比例,重新计算各个区域的特征点和方向。
图像比较时按区域大小排列进行各个特征点对比区域的相似度。
区域的分裂与合并的判断也变得很容易了。

应用领域:
视频的背景提取,提取帧差的区域,过滤该区域计算背景。目前实现的效果超好,速度超快。目前现阶段是最好的背景前景提取算法。
物体或个体的数目统计,该算法仅仅遍历一次图像像素点,因此性能好,可以处理超大图片。
角点检测匹配图像。
图像智能分析识别方面,把特征点归一化和旋转处理后的特征进行训练。用决策树或svm等人工智能模型进行预测。包括人脸识别,行人识别,指纹识别。ocr字符识别等等。
网页认证校验码识别 二维码识别等等
区域比较时,特征点按角度排序,识别时加上基准进行排列对比,得到相似度。
比较好的比较方式是:先做区域分析出重心的偏移角度 然后再旋转这个角度后重新做区域分析,得出的特征点进行对比。

训练图片:
1、一般训练图片,重心位置相差不大,如人脸,但是由于各种表情 重心轻微变化。因此,重心是第一特征,变化大的,就记录下来观察原因。
2、全角点检测,采用360度 每隔120度做一次旋转后分析区域的得到的角点进行保留。全部特征去掉重复的,并标记各次旋转的特征点击中率。去掉击中率为1的,仅仅是分裂合并点。

预测图片:
1、区域分析一次,先比较重心位置,然后比较分裂合并特征点满足度。
2、如果重心位置偏差太多,就仅仅比较角点满足度。或者校正重心角度重新区域分析后进行特征点对比。
3、全角度分析过,就直接分析角点满足度,因角点位置是相对重心位置的,因此不必要比较重心了。

区域和图片对比:
区域可能是图片的一部分,这时候重心就变成大问题了。这只能使用flann最近邻搜索。任意选点 求出各点和它的距离排序,循环图片的点和周围点的距离 进行比较 得到到最相似的一段。
图片包含多个区域,另一个大图片搜索这个图片的情况,怎么办?
大图中 先采用最近的区域合并求重心 分别和小图片的区域合并的重心对比 找到区域合并分裂的情况。然后各个区域进行特征点匹配。
不管是怎么比,规则是从最大的区域开始比较。

全角点检测:
1、旋转后 区域重心也旋转了,重心来识别区域id,根据id编号来添加新发现的角点和统计角点击中率。
2、可以根据角点数量来分析区域是否分裂为几个区域。区域面积累加做分析。

demo:
红色是重心 黄色是中心 绿色是从分裂合并点里分析出的角点 蓝色是分裂合并点

视频的设置参数
minConnNum = 5; //水平扫描连接数  如果是水平运动方向 越大越防止抖动 但是精度也降低
minInterval = 3; //垂直方向最小间隔 断连接数
noConnNum = 3; //水平扫描过程 断连接数 
dCorner = 0.666; //角度检测 类似checkCorner*180;度以内的角点 
alpha1 = 0.15; //初始背景加入比例
alpha2 = 0.05; //画面稳定后的背景图加入比例
iNoise = 20; //噪点像素大小 面积=iNoise*iNoise
diffPercent = 0.9; //背景变化百分比到多少 就重新开始背景分析
frameNum = 40; //开始背景分析的帧数 用alpha1中和背景图
brightness = 0;
contrast = 0;
for (int i=0;i<4;i++)
{
iThd[i] = 40; //rgb三像素阈值
iWeight[i] = 1; //权重
}
//rgb适配
bool CpwwRegionConnect::rgbAdapt(uchar*& ptr, int& iValue, int iChannel, const S_BgParam& params)
{
int rayvalue=0;
for( int i=0;i<iChannel;i++){
iValue += *ptr;
rayvalue += ((bool)(*ptr++ > params.iThd[i]))*params.iWeight[i];
}

return rayvalue;
}


原文:http://bbs.csdn.net/topics/390835367

演示程序地址:

http://download.csdn.net/user/pww71

源码:https://sourceforge.net/projects/pwwregionfe/?source=navbar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值