请问一下图形平滑中的中值滤波和领域平均法
最好有代码[email protected]
最好有代码[email protected]
解决方案 »
- 求救 send()返回值为0 为什么?(使用TCP协议 )
- 赶着回家 大家帮忙 :),最小生成树的问题(GUI)
- 关于txt文件的输入问题
- 英文差,MSDN中的下面这句话怎么翻译?
- 不好意思,一个菜鸟问题,谁能告诉我怎么在directx下怎么做一个可以输入中文的编辑框吗?
- 如何模拟SB_THUMBTRACK和SB_THUMBPOSITION,让控件自动滚动?
- 如何在自己的类里设定可变长度的数组啊?
- 据书上介绍:setsockopt后,再调用网络函数一般都返回失败,那么我如何知道目标端是否可达?
- 一封写给所有人的忏悔信-------是我太执著 还是我太稚嫩
- 谁可以给我提供一个简单的,使用起来容易的smtp类呢?急用!谢谢了!
- 我的vc怎么装不上了
- 在vc中怎么样将字符型转换为浮点型?
http://www.vckbase.com/code/downcode.asp?id=327
这是一个滤波器的源代码,实现了根据波形数值在屏幕上画出波形,在工业设计中有参考价值。
实现图象平滑(去噪声),锐化算法的源代码.
http://www.vckbase.com/code/downcode.asp?id=347另一个参考代码:
BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHeight,
int iFilterH, int iFilterW,
int iFilterMX, int iFilterMY)
{
// 指向源图像的指针
unsigned char* lpSrc;
// 指向要复制区域的指针
unsigned char* lpDst;
// 指向复制图像的指针
LPSTR lpNewDIBBits;
HLOCAL hNewDIBBits;
// 指向滤波器数组的指针
unsigned char * aValue;
HLOCAL hArray;
// 循环变量
LONG i;
LONG j;
LONG k;
LONG l;
// 图像每行的字节数
LONG lLineBytes;
// 计算图像每行的字节数
lLineBytes = WIDTHBYTES(lWidth * 8);
// 暂时分配内存,以保存新图像
hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);
// 判断是否内存分配失败
if (hNewDIBBits == NULL)
{
// 分配内存失败
return FALSE;
}
// 锁定内存
lpNewDIBBits = (char * )LocalLock(hNewDIBBits);
// 初始化图像为原始图像
memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);
// 暂时分配内存,以保存滤波器数组
hArray = LocalAlloc(LHND, iFilterH * iFilterW);
// 判断是否内存分配失败
if (hArray == NULL)
{
// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
// 分配内存失败
return FALSE;
}
// 锁定内存
aValue = (unsigned char * )LocalLock(hArray);
// 开始中值滤波
// 行(除去边缘几行)
for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++)
{
// 列(除去边缘几列)
for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++)
{
// 指向新DIB第i行,第j个象素的指针
lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;
// 读取滤波器数组
for (k = 0; k < iFilterH; k++)
{
for (l = 0; l < iFilterW; l++)
{
// 指向DIB第i - iFilterMY + k行,第j - iFilterMX + l个象素的指针
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;
// 保存象素值
aValue[k * iFilterW + l] = *lpSrc;
}
}
// 获取中值
* lpDst = GetMedianNum(aValue, iFilterH * iFilterW);
}
}
// 复制变换后的图像
memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);
// 释放内存
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
LocalUnlock(hArray);
LocalFree(hArray);
// 返回
return TRUE;
}