骨架提取
来源:互联网 发布:swift编程权威指南 编辑:程序博客网 时间:2024/04/27 20:57
BOOL IsContourP(int x,int y, IplImage *Src_Img)
{
BOOL p[10] ={0};
int LineBytes =Src_Img->widthStep;
BYTE *lpPtr= (BYTE*)(Src_Img->imageData+LineBytes*y)+x;
p[2]=*(lpPtr-LineBytes) ? true:false;
p[3]=*(lpPtr-LineBytes+1) ? true:false;
p[4]=*(lpPtr+1) ? true:false;
p[5]=*(lpPtr+LineBytes+1) ? true:false;
p[6]=*(lpPtr+LineBytes) ? true:false;
p[7]=*(lpPtr+LineBytes-1) ? true:false;
p[8]=*(lpPtr-1) ? true:false;
p[9]=*(lpPtr-LineBytes-1) ? true:false;
int Np=0;//邻域不为零节点总数
int Tp=0;//邻域节点由0变成1的次数
for (int i=2; i<10; i++)
{
Np += p[i];
int k= (i<9) ? (i+1) : 2;
if ( p[k] -p[i]>0)
{
Tp++;
}
}
int p246= p[2] && p[4] && p[6];
int p468= p[4] && p[6] && p[8];
int p24= p[2] && !p[3] && p[4] && !p[5]&& !p[6] && !p[7] && !p[8] && !p[9];
intp46= !p[2] && !p[3] && p[4] && !p[5] &&p[6] && !p[7] && !p[8] && !p[9];
int p68=!p[2] && !p[3] && !p[4] && !p[5] &&p[6] && !p[7] && p[8] && !p[9];
int p82=p[2] && !p[3] && !p[4] && !p[5] &&!p[6] && !p[7] && p[8] && !p[9];
int p782= p[2] && !p[3] && !p[4] && !p[5]&& !p[6] && p[7] && p[8] && !p[9];
intp924= p[2] && !p[3] && p[4] && !p[5] &&!p[6] && !p[7] && !p[8] && p[9];
int p346=!p[2] && p[3] && p[4] && !p[5] && p[6]&& !p[7] && !p[8] && !p[9];
int p568= !p[2]&& !p[3] && !p[4] && p[5] && p[6]&& !p[7] && p[8] && !p[9];
int p689= !p[2] && !p[3] && !p[4] && !p[5]&& p[6] && !p[7] && p[8] && p[9];
intp823= p[2] && p[3] && !p[4] && !p[5] &&!p[6] && !p[7] && p[8] && !p[9];
int p245=p[2] && !p[3] && p[4] && p[5] && !p[6]&& !p[7] && !p[8] && !p[9];
int p467= !p[2]&& !p[3] && p[4] && !p[5] && p[6]&& p[7] && !p[8] && !p[9];
int p2468= p24 || p46 || p68 || p82;
int p3333= p782 || p924 || p346 || p568 || p689 || p823 || p245 || p467;
//判定条件第一个由数字图像处理上得到,由于结果不够满意,又加上两个条件
return ( !p246 && !p468 && (Np<7) && (Np>1) && (Tp==1) ) || p2468 || p3333;
}
void thin( IplImage *Src_Img)//细化轮廓,得到单像素轮廓
{
int i, j;
CvSize img_size = cvGetSize(Src_Img);
int Remove_Num=0;
do //循环调用,直至没有可以去掉的点
{
Remove_Num=0;
for (j = 1; j < img_size.height-1; j++)
{
for(i = 1; i < img_size.width-1; i++)
{
BYTE gray_value = ((BYTE*)(Src_Img->imageData + Src_Img->widthStep*j))[i];
if ( gray_value && IsContourP( i, j, Src_Img))//符合条件,去掉
{
((BYTE*)(Src_Img->imageData + Src_Img->widthStep*j))[i]=(UCHAR)0;
Remove_Num++;
} //if
} //for
} //for
} while( Remove_Num);
}
- 骨架提取
- 提取骨架(细化)
- 图像骨架提取实现
- 骨架提取----细化
- 图像细化、骨架提取
- 骨架提取算法
- 图象的骨架提取算法
- 三维网格的骨架提取
- opencv2实现形态学骨架提取
- opencv 骨架提取/图像细化
- 基于zhang 的骨架提取
- 提取图像的骨架(Skeleton)算法
- 击中式细化图像,提取图像骨架。
- 【Android】opencv图像处理之提取骨架
- 二值图像的骨架提取
- 自己验证的一片扯淡的骨架提取论文
- 骨架提取——Khalid Sheed的K3M算法
- 基于距离变换的中轴线道路骨架提取算法
- ASP.NET+JQuery实现AJAX的分页
- 用ps命令显示进程的详细信息
- 正在读的书:程序开发心理学
- 名人博客和习题网站
- GSM的简单介绍-发展现状
- 骨架提取
- 金融危机下 保险信息化聚焦什么?
- MySQL备份和恢复数据表的方法
- 高峰对话:优化IT 管控风险的解决之道
- 正在读的书:重构:改善既有代码的设计
- jQuery 陷阱。。。。
- pku 2349(最小生成树)
- oracle sql*plus set &spool介绍(二)
- Secospace TSM 终端安全管理系统概述