谁有中值滤波、高通、低通、带通滤波的算法阿 Matlab +VC 6.0 +matcom??? 请求源程序

slyzhang 2004-07-18 07:12:19
我在做语音识别,好多算法不懂 希望寻找中值滤波、带通滤波、低通滤波、高通滤波的算法程序


前面使用Matlab +VC+Matcom 制作Dll , 可惜使用MatCom时 不能使用信号工具箱函数 请教各位了


如何VC 下使用 matcom 制作工具箱中的Dll 阿 ??????
...全文
460 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
changlele 2004-07-19
  • 打赏
  • 举报
回复
带通滤波也是类似,只不过模板的取值不同,

有的模板是这样的

1 2 1
2 4 2
1 2 1

等等。类似的模板有的是,找本书看看吧,
可能上面写的有点不对,最中间的值好像错了
这些东西都记不住了,很久以前做这些玩意
建议你看《数字图像处理(第二版)》
那本书,里面有很多算法的介绍
changlele 2004-07-19
  • 打赏
  • 举报
回复
比如一个800×600象素的图像,
处理的时候选择一个模板一般是3×3或者5×5的

用这个模板遍历。取出一个象素点周围的8个点(3×3的情况)加上自己本身这个点。
这9个点找出象素中间的那个值,用这个值替代取出的那个象素点。

当然5×5的模板也类似

处理部分的源代码如下

int a[9];
int i,j,t,m,k; //中值滤波
for(i = 1; i< m_nHeight - 1; i++)
for(j = 1; j< m_nWidth - 1 ; j++)
{
a[0] = Data[i][j];
a[1] = Data[i-1][j];
a[2] = Data[i+1][j];
a[3] = Data[i][j-1];
a[4] = Data[i][j+1];
a[5] = Data[i+1][j+1];
a[6] = Data[i-1][j-1];
a[7] = Data[i+1][j-1];
a[8] = Data[i-1][j+1];

for(k=0;k<9;k++)
for(m=0;m<9-i;m++)
if( a[i] > a[i+1] )
{
t = a[i];
a[i] = a[i+1];
a[i+1] = a[i];
}
Data[i][j] = a[5];
}


Data[i][j]就是待处理的图像的象素值
changlele 2004-07-19
  • 打赏
  • 举报
回复
源代码都已经发送给你了
发送者changlelele@netease.com
wrcluomo 2004-07-19
  • 打赏
  • 举报
回复
这个是中值的,排序我用的冒泡法.你可以改改.
wrcluomo 2004-07-19
  • 打赏
  • 举报
回复
void CWrcimageDoc::GetRGBMedian(char *pucImageData,long lLineBytes,int x,int y,int *pnRGB,int nStep)
{

unsigned char r[9],g[9],b[9];
r[0]=*(pucImageData+lLineBytes*(y-1)+(x-nStep)+2);
g[0]=*(pucImageData+lLineBytes*(y-1)+(x-nStep)+1);
b[0]=*(pucImageData+lLineBytes*(y-1)+(x-nStep));

r[1]=*(pucImageData+lLineBytes*(y-1)+(x)+2);
g[1]=*(pucImageData+lLineBytes*(y-1)+(x)+1);
b[1]=*(pucImageData+lLineBytes*(y-1)+(x));

r[2]=*(pucImageData+lLineBytes*(y-1)+(x+nStep)+2);
g[2]=*(pucImageData+lLineBytes*(y-1)+(x+nStep)+1);
b[2]=*(pucImageData+lLineBytes*(y-1)+(x+nStep));


r[3]=*(pucImageData+lLineBytes*y+(x-nStep)+2);
g[3]=*(pucImageData+lLineBytes*y+(x-nStep)+1);
b[3]=*(pucImageData+lLineBytes*y+(x-nStep));

r[4]=*(pucImageData+lLineBytes*y+(x)+2);
g[4]=*(pucImageData+lLineBytes*y+(x)+1);
b[4]=*(pucImageData+lLineBytes*y+(x));

r[5]=*(pucImageData+lLineBytes*y+(x+nStep)+2);
g[5]=*(pucImageData+lLineBytes*y+(x+nStep)+1);
b[5]=*(pucImageData+lLineBytes*y+(x+nStep));


r[6]=*(pucImageData+lLineBytes*(y+1)+(x-nStep)+2);
g[6]=*(pucImageData+lLineBytes*(y+1)+(x-nStep)+1);
b[6]=*(pucImageData+lLineBytes*(y+1)+(x-nStep));

r[7]=*(pucImageData+lLineBytes*(y+1)+(x)+2);
g[7]=*(pucImageData+lLineBytes*(y+1)+(x)+1);
b[7]=*(pucImageData+lLineBytes*(y+1)+(x));

r[8]=*(pucImageData+lLineBytes*(y+1)+(x+nStep)+2);
g[8]=*(pucImageData+lLineBytes*(y+1)+(x+nStep)+1);
b[8]=*(pucImageData+lLineBytes*(y+1)+(x+nStep));

int i,j;
unsigned char ucTem;
for(i=0;i<8;i++)
{
for(j=0;j<8-i;j++)
{

if(r[j]>r[j+1])
{
ucTem=r[j];
r[j]=r[j+1];
r[j+1]=ucTem;
}

if(g[j]>g[j+1])
{
ucTem=g[j];
g[j]=g[j+1];
g[j+1]=ucTem;
}

if(b[j]>b[j+1])
{
ucTem=b[j];
b[j]=b[j+1];
b[j+1]=ucTem;
}

}
}
pnRGB[0]=r[4];
pnRGB[1]=g[4];
pnRGB[2]=b[4];

}
wrcluomo 2004-07-19
  • 打赏
  • 举报
回复
////中值滤波
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bool CWrcimageDoc:: MedianFilter(void)
{
char * pcSource,*pcDest,*pcSourceData,*pcDestData;
pcSource=(char *)::GlobalLock(m_hDIB);
::GlobalUnlock(m_hDIB);
int nBits,nStep;
nBits=::DIBBits(pcSource);
if(!(nBits==24||nBits==32))
{
AfxMessageBox("不是24/32位真彩位图,请转为24/32位位图");
return false;
}
nStep=nBits/8;
int nWidth,nHeight;
long lLineBytes;
unsigned char * pucSource=NULL,*pucDest=NULL;
HGLOBAL hTemImage=NULL;
hTemImage=::CopyHandle((HGLOBAL)m_hDIB);

if(hTemImage==NULL)
{
AfxMessageBox("分配内存失败");
::GlobalFree(hTemImage);
hTemImage=NULL;
return false;
}


pcDest=(char *)::GlobalLock(hTemImage);
::GlobalUnlock(hTemImage);
pcSourceData=::FindDIBBits(pcSource);
pcDestData=::FindDIBBits(pcDest);
nWidth=::DIBWidth(pcSource);
nHeight=::DIBHeight(pcSource);
lLineBytes=WIDTHBYTES(nWidth *nBits);
int i,j;
int pnRGB[3];
unsigned char * r,*g,*b;
for(i=1;i<nStep*(nWidth-1);i=i+nStep)
{
for(j=1;j<nHeight-1;j++)
{

GetRGBMedian( pcDestData,lLineBytes,i,j, pnRGB,nStep);
r=(unsigned char *) pcSourceData+lLineBytes*j+i+2;
g=(unsigned char *) pcSourceData+lLineBytes*j+i+1;
b=(unsigned char *) pcSourceData+lLineBytes*j+i;
*r=pnRGB[0];
*g=pnRGB[1];
*b=pnRGB[2];

}
}

::GlobalFree(hTemImage);
hTemImage=NULL;
return true;
}
slyzhang 2004-07-18
  • 打赏
  • 举报
回复
sly582@sohu.com

最好是有源代码的 我可以分析和使用阿 最近时间比较紧了 快死了。


感谢各位了。!!!! 能否给个整体的思路????

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧