请问一下图形平滑中的中值滤波和领域平均法
最好有代码[email protected]

解决方案 »

  1.   

    滤波器源代码 
    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;
    }
      

  2.   

    我看到个图片库,里面有许多的卷积应用比如锐化模糊之类的滤镜都有
    http://www.codeproject.com/bitmap/cximage.asp可以参考一下