【新手】数学形态学的腐蚀、膨胀、开运算、闭运算、击中、不击中、骨架化等变换中,结构元素分解能提高效率吗???

sxshao 2005-04-02 04:30:55
【新手】数学形态学的腐蚀、膨胀、开运算、闭运算、击中、不击中、骨架化等变换中,结构元素分解能提高效率吗???

如:

0 1 1 1 0
1 1 1 1 1
1 1 @ 1 1
1 1 1 1 1
0 1 1 1 0

=

1
@
1

+

1 @ 1

+

0 1 0
1 @ 1
0 1 0



...全文
708 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxshao 2005-04-03
  • 打赏
  • 举报
回复
3 * 3 / ( 3 + 3 ) = 3 / 2 = 1.5

5 * 5 / ( 5 + 5 ) = 5 / 2 = 2.5

7 * 7 / ( 7 + 7 ) = 7 / 2 = 3.5

huanyun 2005-04-03
  • 打赏
  • 举报
回复
其实不一定的 实际要比较的话 还是使用算法测试精确数据吧
因为每做一次都要准备缓冲 而且要遍历图像
我的算法 自己测试的是 3*3 变为 3+3 并不能提高效率
5*5 变为 5+5 可以提高效率
7*7 变为 7+7 可以大幅度提高效率
sxshao 2005-04-02
  • 打赏
  • 举报
回复
////////////////////////////////////////////////////////////////////////
//BOOL MakeErosion()
//----------------------------------------------------------------------
//基本功能:本函数对图像数据执行腐蚀操作。
//----------------------------------------------------------------------
//参数说明:int *nMask 结构元素数组指针
// int nMaskLen 结构元素长度(以点数为计数单位)
// unsigned char *pOut 输出图像数据指针
// unsigned char *pIn 输入图像数据指针
// int nWidthBytes 图像宽度(以字节表示)
// int nWidth 图像宽度(以像素表示)
// int nHeight 图像高度
//----------------------------------------------------------------------
//返 回:BOOL
// 成功返回TRUE,失败返回FALSE。
//----------------------------------------------------------------------
//注 意:此函数声明为保护型,只能在CMorphPro类中使用。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CMorphPro::MakeErosion(int *nMask, int nMaskLen,
unsigned char *pOut, unsigned char *pIn,
int nWidthBytes, int nWidth, int nHeight)
{
_Normalization(pIn, nWidthBytes, nWidth, nHeight);

//若传入的图像数据为空,将无法完成操作,直接返回。
if(pOut == NULL || pIn == NULL) return FALSE;

//定义变量
int x, y, k;
unsigned char Mark;
CString CStrMessage;

for (k = 0; k < nMaskLen; k++)
{
CStrMessage.Format("(x,y) : (%d,%d)", nMask[2*k], nMask[2*k+1] ) ;
//AfxMessageBox(CStrMessage);
}

//执行腐蚀操作
for( y = 0; y < nHeight; y++ )
{
unsigned char *pOutTemp = pOut;
pOutTemp += y * nWidthBytes;
for( x = 0; x < nWidth; x++ )
{
Mark = 1;
for (k = 0; k < nMaskLen; k++)
{
//不能处理边界像素
if ((x + nMask[2 * k] >= 0 ) &&
(x + nMask[2 * k] < nWidth) &&
(y + nMask[2 * k + 1] >= 0) &&
(y + nMask[2 * k + 1] < nHeight))
{
unsigned char Data;
//取与模板中位置相对应的像素值
unsigned char *pTemp = pIn;
pTemp += y * nWidthBytes;
pTemp += nMask[2 * k + 1] * nWidthBytes;
Data = pTemp[x + nMask[2 * k]];
if(Data != 255)
{
Mark = 0;
k = nMaskLen;
}
}
else
{
Mark = 0;
k = nMaskLen;
}
}
if (Mark == 1) pOutTemp[x] = 255;
}
}

return TRUE;
}
sxshao 2005-04-02
  • 打赏
  • 举报
回复
腐蚀、膨胀的循环往往不需要全部走完就知道结果跳出来了。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧