社区
机器视觉
帖子详情
请问关于连通域面积的算法,急!
shanti
2003-08-19 08:58:29
加精
欢迎与我联系讨论
loisyan@sohu.com
...全文
247
15
打赏
收藏
请问关于连通域面积的算法,急!
欢迎与我联系讨论 loisyan@sohu.com
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shanti
2003-08-26
打赏
举报
回复
谢谢你,我试试:)
wrcluomo
2003-08-22
打赏
举报
回复
递归就不要做了,对大图不行,老是溢出。
//递归标号法递归程序
///////////////////////////////////////////////////////////////
void CCh1_1View::Search_biao(int x, int y)
//lWidth,lHeight为图像宽,高,x,y为所检测的像素所在的行列,lLineBytes为图像每行的字节数,lpDIBBits为指像图像像素起始位置的指针,
//lpdest=malloc(lHeight*lWidth)为指向所分置内存的指针,count为图像像素的标号。
{
static unsigned char* lpSrc;
lpSrc= new unsigned char;
lpSrc = (unsigned char*)lpDIBBitss + lLineBytes * (g_height - 1 - y) + x;
if (*lpSrc==0&&lpdest[g_width*(y-1)+x]==(unsigned char)0)
{
lpdest[g_width*(y-1)+x]=(unsigned char )count;
}
else
{
return;
delete lpSrc;
}
if(x-1>=1)
Search_biao(x-1, y);
if(x+1<g_width-1)
Search_biao(x+1, y);
if(y-1>=1)
Search_biao(x, y-1);
if(y+1<g_height-1)
Search_biao(x, y+1);
}
///////////////////////////////////////////////////////////////
//递归标号法主程序
///////////////////////////////////////////////////////////////
void CCh1_1View::OnSearchBiao()
{
CDC * pdc = GetDC();
// 获取文档
CCh1_1Doc* pDoc = GetDocument();
// 指向DIB的指针
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;
// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 更改光标形状
BeginWaitCursor();
// 找到DIB图像象素起始位置
lpDIBBits = ::FindDIBBits(lpDIB);
unsigned char* lpSrc;
int i,j;
//CDC *ppdc=GetDC();
// 图像每行的字节数
LONG lLineBytes;
int lWidth,lHeight;
lWidth=::DIBWidth(lpDIB);
lHeight=::DIBHeight(lpDIB);
// 计算图像每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);
lpdest=new unsigned char[g_height*g_width];
for(i=0;i<g_height*g_width;i++)//将分配的新内存其值全部高为0
*(lpdest+i)=(unsigned char)0;
////////////////////////////////////////////////////
for(j=1;j<g_height-1;j++)
for(i=1;i<g_width-1;i++)
{
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (g_height - 1 - j) + i;
if (*lpSrc==0&&lpdest[g_width*(j-1)+i]==(unsigned char)0)
{
count+=1;
Search_biao(i, j);
}
}
int t;
int *area;
area= new int [count+1];
for(i=0;i<count+1;i++)
area[i]=0;
for(i=1;i<g_width-1;i++)
for(j=1;j<g_height-1;j++)
for(t=0;t<count+1;t++)
{
if((int)lpdest[g_width*(j-1)+i]==t)
area[t]+=1;
}
for(i=1;i<g_width-1;i++)
for(j=1;j<g_height-1;j++)
{
for(t=0;t<count+1;t++)
if (area[t]<200&&(int)lpdest[g_width*(j-1)+i]==t)
*((unsigned char*)lpDIBBits + lLineBytes * (g_height - 1 - j) + i)=255;
}
// 恢复光标
EndWaitCursor();
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
//::free(lpdest);
delete lpdest;
delete area;
pDoc->UpdateAllViews(NULL);
}
///////////////////////////////////////////
/////////////////////////////////////
希望你能改好。
shanti
2003-08-22
打赏
举报
回复
递归标记如何做呢?
我现在这种方法可以计算面积了,还不知道是否正确,还有就是,速度的确很慢
wrcluomo
2003-08-22
打赏
举报
回复
标记法不行。速度慢,对复杂图形不效果不好。我以前试过。递归标记还行,但对大图像堆溢出。
shanti
2003-08-22
打赏
举报
回复
我采用对连通域做标记的方法,现在在做修改,还没有实现
shanti
2003-08-21
打赏
举报
回复
请说清楚些,链表法如何实现呢?
wrcluomo
2003-08-21
打赏
举报
回复
我知道有一个链表法,就是把边界跟踪下来,对边界点排序,然后扫描这个区域,扫描过的换成别的颜色。
wrcluomo
2003-08-21
打赏
举报
回复
给你发过去,得自己整理,你有什么算法,希望交流。不是一句两句说清的。
shanti
2003-08-20
打赏
举报
回复
如果在图像中有许多物体,我希望可以计算面积并加以统计来区分想要的物体和不想要的物体,该如何计算不同的物体的面积?
寻开心
2003-08-20
打赏
举报
回复
支持HUNTON
wtzmax
2003-08-20
打赏
举报
回复
................
种子填充算法用来在封闭曲线形成的环中填充某中颜色,在这里我们只填充黑色。
种子填充其实上是图形学中的算法,其原理是:准备一个堆栈,先将要填充的点push进堆栈中;以后,每pop出一个点,将该点涂成黑色,然后按左上右下的顺序查看它的四个相邻点,若为白(表示还没有填充),则将该邻点push进栈。一直循环,直到堆栈为空。此时,区域内所有的点都被涂成了黑色。
................
HUNTON
2003-08-20
打赏
举报
回复
如果知道区域边界点就用这个方法吧:
我们都知道已知A(x1,y1)B(x2,y2)C(x3,y3)三点的面积公式为
|x1 x2 x3|
S(A,B,C) = |y1 y2 y3| * 0.5 (当三点为逆时针时为正,顺时针则为负的)
|1 1 1 |
对多边形A1A2A3、、、An(顺或逆时针都可以),设平面上有任意的一点P,则有:
S(A1,A2,A3,、、、,An)
= abs(S(P,A1,A2) + S(P,A2,A3)+、、、+S(P,An,A1))
P是可以取任意的一点,用(0,0)就可以了。
还有一个方法:
任意一个简单多边形,当它的各个顶点位于网格的结点上时,它的面积数S=b/2+c+1
其中:b代表该多边形边界上的网络结点数目
c代表该多边形内的网络结点数目
所以把整个图形以象素为单位可以把整个图形分成若干个部分,计算该图形边界上的点b和内部的点c就得到面积数S了,然后把S乘以一个象素的面积就是所求的面积了。
wtzmax
2003-08-20
打赏
举报
回复
种子填充,计算种子数
shanti
2003-08-20
打赏
举报
回复
我看到有一种:lumia算法,不知道是怎么样的一种算法?
eastsun
2003-08-20
打赏
举报
回复
dots.
MATLAB
算法
实战应用案例精讲-【图像处理】机器视觉
关于速度,一般机器视觉的分辨率远高于计算机视觉,而且往往要求实时,所以处理速度很关键,目前基本上不适合采用深度学习。 以上讨论的是技术,商业方面,计算机视觉的应用面更广一些,毕竟很多业务是跟人相关,...
【技术】机器视觉技术原理解析及应用领域
01 简介机器视觉是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析
算法
、图像卡、 I/O卡等)。一个典型的机器视觉应用系统...
车牌识别easypr的详细介绍
车牌识别中核心的机器学习
算法
的模型,他直接使用了原书提供的,而我这两个过程的模型是自己生成,而且模型也做了测试,作为开源系统的一部分也提供了出来。 尽管我和他的系统有这么多的不同,但是我们在根本的系统...
非常详细的讲解车牌识别easypr
车牌识别中核心的机器学习
算法
的模型,他直接使用了原书提供的,而我这两个过程的模型是自己生成,而且模型也做了测试,作为开源系统的一部分也提供了出来。 尽管我和他的系统有这么多的不同,但是我们...
目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】机器视觉(基础篇)(十二)
关于速度,一般机器视觉的分辨率远高于计算机视觉,而且往往要求实时,所以处理速度很关键,目前基本上不适合采用深度学习。 以上讨论的是技术,商业方面,计算机视觉的应用面更广一些,毕竟很多业务是跟人相关,...
机器视觉
4,446
社区成员
15,335
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章