社区
机器视觉
帖子详情
请问关于连通域面积的算法,急!
shanti
2003-08-19 08:58:29
加精
欢迎与我联系讨论
loisyan@sohu.com
...全文
246
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.
程序员必备
算法
课!(揭秘淘宝购物车
算法
)
双十一,双十二,你是否也在购物车中放置了很多商品?当面对购物车中不同商家、不同价格、不同质量和服务的商品时,如何在有限的预算下,选择到让你最满意的商品,本次公开课主要从以下几方面进行讲解:首先讲解如何将购物车选择商品问题转进行量化指标度量,转化为计算机可以求解的
算法
问题;其次结合实例讲解实际问题如何利用
算法
求解;最后基于Python语言如何设计
算法
并在计算机上进行实现。
MATLAB
算法
实战应用案例精讲-【图像处理】机器视觉
机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。
【技术】机器视觉技术原理解析及应用领域
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达机器视觉是人工智能正在快速发展的一个分支。01 简介机器视觉是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析
算法
、图像卡、 I/O卡等)。一个典型的机器视觉应用系统包括图像捕捉、光源系统、图像数字化模块、数字图像处理模块、智能判断决策模块和...
车牌识别easypr的详细介绍
更新:基于keras-tensorflow的车牌识别,HyperLPR是一个基于Python的使用深度学习针对对中文车牌识别的实现,与开源的EasyPR相比,它的检测速度和鲁棒性和多场景的适应性都要好于EasyPR。 来自:计算机的潜意识 非常详细的讲解车牌识别EasyPR EasyPR--一个开源的中文车牌识别系统 我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR。 我给它取的名字为EasyP...
非常详细的讲解车牌识别easypr
更新:基于keras-tensorflow的车牌识别,HyperLPR是一个基于Python的使用深度学习针对对中文车牌识别的实现,与开源的EasyPR相比,它的检测速度和鲁棒性和多场景的适应性都要好于EasyPR。 非常详细的讲解车牌识别EasyPR 我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/
机器视觉
4,445
社区成员
15,335
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章