To:polarlm(今年本命年)
比如说用数码相机拍出来的照片有可能会有一些麻点,这些麻点学名叫做噪点。
这些噪点可以通过软件来作优化。比如说PHOTOSHOP、ACDSEE6中的消除杂点,就是这个意思。
偶想知道降低噪点的算法,就是这样拉

解决方案 »

  1.   

    你问错地方了,应该到VC的图像处理板块去问.
    很多书上有,买本VC的数字图像处理的书吧.
      

  2.   

    以前用VC写的gauss平滑函数:
    BOOL WINAPI GaussSmooth(UINT16* lpOriDataBits,long lWidth,long lHeight,int nRange,int nGaussValue)
    {
    long lNewWidth = lWidth + 2*nRange;
    long lNewHeight = lHeight + 2*nRange;
    int i,j,m;
    UINT16* lpDataBits = lpOriDataBits; //一维高斯公式值exp(-(x^2)/a^2)) 
    float *fGaussValue;
    fGaussValue = new float[nRange+1];
    float fRight = 0; 
    for(i = 0;i<=nRange;i++)
    {
    *(fGaussValue+i) = (float)exp(-((float)(i*i))/(float)nGaussValue);
    fRight += *(fGaussValue+i);
    if(i!=0)
    fRight += *(fGaussValue+i);
    }
    UINT16* lpNewDataBits = NULL;
    HLOCAL hNewDataBits = NULL;
    hNewDataBits = LocalAlloc(LHND,lNewWidth*lHeight*sizeof(UINT16));
    if(hNewDataBits == NULL)
    return FALSE;
    //锁定内存
    lpNewDataBits = (UINT16*)LocalLock(hNewDataBits);
    //临时变量
    UINT16* lpTmp = NULL;
    lpTmp = new UINT16[lNewWidth];
    UINT16 unTmp1,unTmp2; //横向扩充
    for(i=0;i<lHeight;i++)
    {
    unTmp1 = *(lpDataBits+i*lWidth);
    unTmp2 = *(lpDataBits+(i+1)*lWidth-1);
    for(j=0;j<nRange;j++)
    {
    *(lpTmp+j) = unTmp1;
    *(lpTmp+lWidth+nRange+j) = unTmp2;
    }
    memcpy(lpTmp+nRange,lpDataBits+i*lWidth,lWidth*sizeof(UINT16));
    memcpy(lpNewDataBits+i*lNewWidth,lpTmp,lNewWidth*sizeof(UINT16));
    }
    //释放变量
    delete[] lpTmp; HLOCAL hTemp=LocalAlloc(LHND, sizeof(float)*lWidth*lNewHeight);
    if (hTemp == NULL)
    return FALSE;
    float* fpTemp=(float*)LocalLock(hTemp);
    float fPointTmp; //求横向高斯卷积后的图像
    for(i=0;i<lHeight;i++)
    {
    for(j = 0;j<lWidth;j++)
    {
    fPointTmp = 0;
    for(m=-nRange;m<=nRange;m++)
    {
    fPointTmp += (*(lpNewDataBits+i*lNewWidth+j+m+nRange))*(*(fGaussValue+abs(m)));
    }
    fPointTmp = fPointTmp/fRight;
    *(fpTemp+(i+nRange)*lWidth+j) = fPointTmp;
    }
    }
    LocalUnlock(hNewDataBits);
    LocalFree(hNewDataBits);
    //上下扩充图像
    for(i=0;i<nRange;i++)//拷贝上下各nRange行
    {
    memcpy(fpTemp+(i*lWidth),fpTemp+nRange*lWidth,lWidth*sizeof(float));
    memcpy(fpTemp+(lHeight+i+nRange)*lWidth,fpTemp+(nRange+lHeight-1)*lWidth,lWidth*sizeof(float));
    }
    //求竖向高斯卷积后的图像
    for(i=0;i<lHeight;i++)
    {
    for(j = 0;j<lWidth;j++)
    {
    fPointTmp = 0;
    for(m=-nRange;m<=nRange;m++)
    {
    fPointTmp += (*(fpTemp+(nRange+i+m)*lWidth+j))*(*(fGaussValue+abs(m)));
    }
    fPointTmp = fPointTmp/fRight;
    *(lpDataBits+i*lWidth+j) = int(fPointTmp);
    }
    }
    delete [] fGaussValue;
    LocalUnlock(hTemp);
    LocalFree(hTemp);
    return TRUE;
    }
      

  3.   

    TO: chensan(anders)
    这个可以实现降低图象噪点的功能吗?
      

  4.   

    有篇文章蛮好,不知道合适不
    http://www.microsoft.com/china/msdn/library/dnaspp/html/colorquant.asp
      

  5.   

    TO:chili(我是位研究僧)
    感谢,但是不知道最后一种方法的算法在哪里
      

  6.   

    TO:fulinxlt(林南)
    算法是什么?
      

  7.   

    TO:betteronly(小鸟试飞)
    谢谢
      

  8.   

    你可以多参考一下图象处理方面的书籍,很理论的那种。我原来做过,不过效果很不满意,如果做到photoshop那种,肯定会有一群公司抢着要的!!!
      

  9.   

    HOHO~只能靠你自己了,俺不懂,懂的也未必来告诉你我呀~