大家好,我是【1+1=王】, 热爱java的计算机(人工智能)渣硕研究生在读。
如果你也对java、人工智能等技术感兴趣,欢迎关注,抱团交流进大厂!!!
Good better best, never let it rest, until good is better, and better best.
近期会把自己本科阶段的一些课程设计、实验报告等分享出来,供大家参考,希望对大家有帮助。
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
1、 掌握腐蚀和求补集操作的基本算法。
2、 使用二值图像,进行边界提取和区域填充。
形态学一般是使用二值图像,进行边界提取和区域填充,基本的算法:膨胀腐蚀,开操作,闭操作,击中击不中变换,边界提取主要涉及腐蚀和求补集操作,本次作业就是利用二值图像进行区域填充。
1) 原理
区域填充:指的是在输出平面的闭合区域内完整地填充某种颜色或图案,区域填充的原理是区域填充——A表示一个包含子集的集合,其子集的元素均是区域的8连通边界点,区域填充目的是从边界内的一个点开始,用1(255)填充整个区域。我们将背景点标记为0, 1为区域内的点,则下列过程将整个区域用填充: 如果Xk=Xk-1,则算法在迭代的第k步结束,得到结果。
2) 流程
打开vc++6.0,在mfc处添加区域填充函数,并在相应位置编写算法。我们取结构元素B为十字形,中点在中心,先取一个在边界之内(区域之内)的像素点作为初始条件x0,同时开辟内存,存储一个原图像的反色图像,在使用结构元素B对xk进行膨胀的时候,每膨胀完一次,就与反色图像对应位置的像素点进行比较,如果相同,则增加该点,否则不填充。此循环的结束条件为 (即新的xk与原图A相交),即到达边界,此时循环结束,最后完成区域填充。
3) 数据输出
void CAView::Onquyutianchong()
{
BackForUndo(GetDocument()->GetHDIB());
// 获取文档
CADoc* pDoc = GetDocument();
// 指向DIB的指针
LPSTR lpDIB;
// 指向DIB象素指针
LPSTR lpDIBBits;
LPSTR lpNewDIBBits;
// 锁定DIB
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
// 更改光标形状
BeginWaitCursor();
lpDIBBits = ::FindDIBBits(lpDIB); // 找到DIB图像像素起始位置
// 图像的宽度和高度
LONG lWidth;
LONG lHeight;
lWidth=::DIBWidth(lpDIB);/* 获取图像的"宽度"(4的倍数)*/
lHeight=::DIBHeight(lpDIB);/*获取图像的高度*/
lpNewDIBBits=new char[sizeof(*lpDIBBits)*lWidth*lHeight];
memcpy(lpNewDIBBits,lpDIBBits,sizeof(*lpDIBBits)*lWidth*lHeight);
//--------------开始实现区域填充
int X, Y;
int Width,Height;
byte * Pointer;
Width = lWidth; Height = lHeight;
for (Y=0;Y<Height;Y++)
{
lpNewDIBBits = lpDIBBits + Y*lWidth;
if (Pointer[0]==0) *lpNewDIBBits=0;
if (lpNewDIBBits [Width-1]==0) *lpNewDIBBits=255;
}
for (X=0;X<Width;X++)
{
lpNewDIBBits = lpDIBBits + X;
if (lpNewDIBBits [0]==0) *lpNewDIBBits=0;
if (lpNewDIBBits [(Height-1)]==0) *lpNewDIBBits=255;
}
for (Y = 0; Y < Height; Y++)
{
lpNewDIBBits = lpDIBBits + Y
for (X = 0; X < Width; X++)
{
if (lpNewDIBBits [X] == 127)
lpNewDIBBits [X] = 0;
else
lpNewDIBBits [X] = 255;
}
}
// 设置脏标记
pDoc->SetModifiedFlag(TRUE);
// 更新视图
pDoc->UpdateAllViews(NULL);
// 解除锁定
::GlobalUnlock((HGLOBAL) pDoc->GetHDIB());
// 恢复光标
EndWaitCursor();
}
博客更新至专栏【课程设计实验报告】:https://blog.csdn.net/weixin_43598687/category_11640051.html
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43598687/article/details/124572394
内容来源于网络,如有侵权,请联系作者删除!