|
|
|
| 5分 |
代码写的很乱,没有层次感,没看懂,猜测内存分配的问题,看看是不是有内存分配时候大小不够的或导致越界的,跟踪调试一下试试吧
|
|
我是直接复制的,放这里可能没有层次感了,这个可以直接放VC里运行的,代码不多,麻烦看下,谢谢了
|
|
| 10分 |
不是有个插入代码的功能呢吗
还有自定义函数的参数最好不要超过四个,一是容易弄混,二是效率不是很高,再者就是别人阅读你的代码会很不舒服的,甚至会直接不看你的代码的 |
#include<stdio.h>
#include<stdlib.h>
#define IMAGE_SIZE_ROW 256
#define IMAGE_SIZE_COL 256
unsigned char origin_image[IMAGE_SIZE_ROW][IMAGE_SIZE_ROW];
unsigned char result_image[IMAGE_SIZE_ROW][IMAGE_SIZE_ROW];
void FILT33(void *I_image,void *O_image,int size_x,int size_y,float eps);
main(int argc,char *argv[])
{
FILE *I_file,*O_file;
char origin_image_file_name[80];
char result_image_file_name[80];
int i;
float eps=0.5;
I_file=fopen("D:\cell.tif","rb");
if(I_file==NULL)
{ perror("printf program error\n");
printf("error");exit(0); }
for(i=0;i<IMAGE_SIZE_ROW;i++)
fread(origin_image[i],sizeof(unsigned char),IMAGE_SIZE_COL,I_file);
FILT33(origin_image,result_image,IMAGE_SIZE_ROW,IMAGE_SIZE_COL,eps);
fclose(I_file);
}
void FILT33(void *I_image,void *O_image,int size_x,int size_y,float eps)
// 3x3 smoothing function
/*arguments:
I_image --> input image pointer
I_image --> output image pointer
size_x,size_y --> image size in both dimensions(row,col)
eps -->difference tolerence */
{
int i,j,ia1,im1,ja1,jm1;
float mean_value,gmax,difference;
unsigned char *ptr1,*ptr2;
ptr1=(unsigned char *)I_image;
ptr2=(unsigned char *)O_image;
for(i=0;i<size_x;i++)
{
printf("*");
for(j=0;j<size_y;j++)
{
ia1=(i+1>size_x-1)?size_x-1:i+1;//get i+1
ja1=(j+1>size_y-1)?size_y-1:j+1;//get j+1
im1=(i-1<0)?0:i-1;//get i-1
im1=(j-1<0)?0:j-1;//get j-1
//calculate 8-neibourhood mean value
mean_value=ptr1[im1*size_y+jm1]+ptr1[im1*size_y+j]+ptr1[im1*size_y+ja1]
+ptr1[i*size_y+jm1]+ptr1[i*size_y+ja1]
+ptr1[ia1*size_y+jm1]+ptr1[ia1*size_y+j]+ptr1[ia1*size_y+ja1];
mean_value=mean_value/8;
//if the difference between mean_value and f(i,j) is greater than ""eps""
//then nochange;else f(i,j) is replaced by mean_value
difference=ptr1[i*size_y+j]-mean_value;
difference=(difference>0)?difference:0-difference;
if(difference<eps) ptr2[i*size_y+j]=mean_value+0.5;
else ptr2[i*size_y+j]=ptr1[i*size_y+j];
}
}
}
我改过了,代码直接插入的,麻烦看下,谢谢了 |
|
|
没人吗,求大神指导,自己先顶一个
|
|
| 5分 |
自己debug一下吧,应该是内存问题导致的crash, 应该很好debug的
|
|
会不会是读进来的图像数据不能像matlab里那样直接看做一个矩阵来处理,fread函数读进来的图像数据是怎样的,二进制的?数据什么形式排列的?
|
|
|
im1=(i-1<0)?0:i-1;//get i-1
im1=(j-1<0)?0:j-1;//get j-1 应该改成以下吧 im1=(i-1<0)?0:i-1;//get i-1 jm1=(j-1<0)?0:j-1;//get j-1 不然jm1的值是不确定的。 |
|
|
我用你的程序运行结果全是*
|
|