小弟最近做毕业设计,题目是数学形态学的灰度滤波。我写了个灰度膨胀滤波。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;
}
}