| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 655 人关注过本帖
标题:[求助]我的灰度滤波到底哪错了??
只看楼主 加入收藏
ds590
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-24
收藏
 问题点数:0 回复次数:2 
[求助]我的灰度滤波到底哪错了??

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

搜索更多相关主题的帖子: 滤波 
2006-04-24 17:20
jslq0130
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-24
收藏
得分:0 

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

2006-04-24 23:33
ds590
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-4-24
收藏
得分:0 

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

2006-04-25 11:16
快速回复:[求助]我的灰度滤波到底哪错了??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080482 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved