void Wavelet_Denoise(IplImage *image)
{
    int i,j,k, width, height, nChannels;
    CvScalar temp;
    width = image->width;
    height = image->height;
    nChannels = image->nChannels;
    double *data = new double [width * height * nChannels];
    
    for(i=0;i<height;i++)
        for(j=0;j<width;j++)
        {
            temp = cvGet2D(image, i, j);
            for(k=0;k<nChannels;k++)
                data[(i*width + j)*nChannels + k] = temp.val[k];
        }
    
    Haar2D(data, width, height, nChannels);
    
    Denoise(data, width, height, nChannels);
    
    Haar_Reconstruct(data, width, height, nChannels);
    
    for(i=0;i<height;i++)
        for(j=0;j<width;j++)
        {
            for(k=0;k<nChannels;k++)
                temp.val[k] = data[(i*width + j)*nChannels + k];
            cvSet2D(image, i, j, temp);
        }
    
    delete [] data;
}
示例#2
0
void AudioCaptureThread::ON_WIMDATA(WPARAM wParam, LPARAM lParam)
{
    if(IsWorking())
    {
#ifdef ENABLE_AUDIO_DENOISE
        Denoise((BYTE*)((PWAVEHDR)lParam)->lpData, ((PWAVEHDR)lParam)->dwBytesRecorded);
#endif//ENABLE_AUDIO_DENOISE

        static ULONG ulPkgNo = 0;

        MMRESULT mmResult = MMSYSERR_NOERROR;
        PWAVEHDR waveHdr = (PWAVEHDR) lParam;

#ifdef ENABLE_AUDIO_AEC
        VERIFY(::GetMicQueue());
        {
            double dCurTime = jrtplib::RTPTime::CurrentTime().GetDouble();
            RecPkgQueue::element_type bufAEC(new AudioBuffer((BYTE*)waveHdr->lpData, waveHdr->dwBytesRecorded, dCurTime));
            if (IsWorking())
            {
                ::GetMicQueue()->push_back(bufAEC);

#ifdef PRINT_AEC_INFO
                SPRINTF_S(dbg_str,
                    "Audio data: mic recv= %d"
                    "\ttime: %f"
                    , ulPkgNo
                    , dCurTime);
                DEBUG_INFO(dbg_str);
#endif//PRINT_AEC_INFO
            }
        }
#else //ENABLE_AUDIO_AEC

        RecPkgQueue::element_type buf2Send(new AudioBuffer((BYTE*)((PWAVEHDR)lParam)->lpData, ((PWAVEHDR)lParam)->dwBytesRecorded, 0));
        ((AudioSendSession*)m_pSession)->getPackageQueue()->push_back(buf2Send);
#endif//ENABLE_AUDIO_AEC
    
        //mmResult = ::waveInPrepareHeader (hWaveIn, waveHdr, sizeof(WAVEHDR));
        //checkMMError(mmResult, true);
        waveHdr->dwFlags = WHDR_PREPARED;

        mmResult = ::waveInAddBuffer (m_hWaveIn, waveHdr, sizeof(WAVEHDR));
        checkMMError(mmResult, true);

        ++ulPkgNo;
    }
}