当前位置: 代码迷 >> C语言 >> [求助]我的灰度滤波到底哪错了??
  详细解决方案

[求助]我的灰度滤波到底哪错了??

热度:99   发布时间:2006-04-24 17:20:00.0
[求助]我的灰度滤波到底哪错了??

小弟最近做毕业设计,题目是数学形态学的灰度滤波。我写了个灰度膨胀滤波。gray_dilation这个程序是书上的,应该没有错,剩下的都是我自己加的,编译可以通过,但是在输出的时候却是一片黑色,不知道怎么回事。所以请各位高手指正。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MAXDX 256 //两个256是我的输入图像的尺寸
#define MAXDY 256
#define MASKDY 3
#define MASKDX 3
#define AMP 2
typedef unsigned char BYTE;
typedef struct
{
int cols;
int rows;
int kern[MASKDY][MASKDX];
int dx,dy;
}Mask; //掩膜的结构
void gray_dilation(unsigned char img[][MAXDX],
int dx,
int dy,
Mask msk,
unsigned char img1[][MAXDX]);
/***********************灰度膨胀滤波********************************
buffer_in:输入图象数据指针
buffer_out:输出图象数据指针
XSIZE:图象宽度
YSIZE:图象高度
amp:输出像素值倍数
********************************************************************/
void main()
{

Mask msk;
int XSIZE=MAXDX;
int YSIZE=MAXDY;
BYTE inbuf[MAXDX*MAXDY];//XSIZE*YSIZE
BYTE outbuf[MAXDX*MAXDY];//XSIZE*YSIZE
typedef unsigned char BYTE;
FILE *fp_c;
FILE *fp;
msk.kern[0][0]=0;msk.kern[0][1]=0;msk.kern[0][2]=0;
msk.kern[1][0]=0;msk.kern[1][1]=0;msk.kern[1][2]=0;
msk.kern[2][0]=0;msk.kern[2][1]=0;msk.kern[2][2]=0;

//FILE *fsav;
/****************************************************************
file open
*****************************************************************/
msk.dx=MAXDX;
msk.dy=MAXDY;
if((fp_c=fopen("input.yuv","rb"))==NULL)
{
printf("cannot open file\n");
exit(0);
}


if((fp=fopen("out21.yuv","wb"))==NULL)
{
printf("cannot creat file\n");
exit(0);
}

fread(inbuf,sizeof(BYTE),XSIZE*YSIZE,fp_c);
gray_dilation(inbuf,msk.dx,msk.dy,msk,outbuf);
fwrite(outbuf,sizeof(BYTE),XSIZE*YSIZE,fp);
fclose(fp);
fclose(fp_c);

}

void gray_dilation(unsigned char img[][MAXDX],
int dx,int dy,Mask msk,
unsigned char img1[][MAXDX])
{
int i,j,s,t,bmax,mx,my,bpix,maskdx,maskdy;
mx=MASKDX/2;my=MASKDY/2;maskdx=msk.cols/2;maskdy=msk.rows/2;
for(i=0;i<dy;i++)
for(j=0;j<dx;j++)
{
bmax=0;
for(s=(-maskdy);s<=maskdy;s++)
for(t=(-maskdx);t<=maskdx;t++)
{
if(((i+s)>=0) && ((i+s)<dy) && ((j+t)>=0) && ((j+t)<dx))
{
bpix=img[i+s][j+t]+msk.kern[s+my][t+mx];
if(bpix>bmax)bmax=bpix;
}
}
if(bmax>255)bmax=255;
img1[i][j]=bmax;
}
}

搜索更多相关的解决方案: 滤波  

----------------解决方案--------------------------------------------------------

没有仔细看你的程序,
我以前出这种问题(输出全0)的时候大概出于下面的原因:
部分数据的类型定义的不对.


----------------解决方案--------------------------------------------------------

呵呵,我找到问题了,的确是输出全零,错误是没有定义msk.cols和msk.rows这两个量!前面宏定义时加个
#define msksize 3//3*3的模板, 然后在主函数里面加上 msk.cols=msksize; msk.rows=msksize就可以了。哈哈


----------------解决方案--------------------------------------------------------
  相关解决方案