To:polarlm(今年本命年)
比如说用数码相机拍出来的照片有可能会有一些麻点,这些麻点学名叫做噪点。
这些噪点可以通过软件来作优化。比如说PHOTOSHOP、ACDSEE6中的消除杂点,就是这个意思。
偶想知道降低噪点的算法,就是这样拉
比如说用数码相机拍出来的照片有可能会有一些麻点,这些麻点学名叫做噪点。
这些噪点可以通过软件来作优化。比如说PHOTOSHOP、ACDSEE6中的消除杂点,就是这个意思。
偶想知道降低噪点的算法,就是这样拉
解决方案 »
- c#.net开发ddVue.ocx控件,编辑cad的dwg文件
- ================正则匹配===================[
- 请问为什么不能激发RowUpdated事件?
- 论坛版块界面的设计
- 我动态添加到窗体的控件,如何删除掉?
- vb的转换为C#的问题
- 求助:如何在C#中取得Windows系统的Service Pack补丁信息
- 用什么控件载入可直接用鼠标编辑图片(winform)
- listview 利用checkbox实现全选与多选的问题
- 动态生成的Table中的CheckBox
- 关于的iframe使用的问题,Help me!!
- 请问在DataGrid增加一个新行时的事件是什么?
很多书上有,买本VC的数字图像处理的书吧.
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;
}
这个可以实现降低图象噪点的功能吗?
http://www.microsoft.com/china/msdn/library/dnaspp/html/colorquant.asp
感谢,但是不知道最后一种方法的算法在哪里
算法是什么?
谢谢