用C语言进行双边滤波到底错在哪里?拜托大家帮我看看

想飞的超人儿 2014-10-24 10:15:41
用C语言进行双边滤波到底错在哪里?拜托大家帮我看看!
大家好,我是图像处理的初学者,研究的是图像去噪,想请大家帮我看看我的这个双边滤波去噪的程序错在哪儿了,为什么双边滤波的结果不对,谢谢大家啦!

#include "stdio.h"
#include "stdlib.h"
#include "mypgm.h"
#include "time.h"
#include "math.h"
#define MAX_IMAGE_SIZE 1024
double d[MAX_IMAGE_SIZE][MAX_IMAGE_SIZE];//d[i][j]表示入力图像,fi][j]表示出力图像。
double f[MAX_IMAGE_SIZE][MAX_IMAGE_SIZE];
void main()
{
int i,j,k,l;
int p = 3;//p决定模板大小。当p=1时,模板为3*3;当p=2时,模板为5*5;当p=n时,模板为(2n+1)*(2n+1)。
short m,n;
double a1=0.01,b1=0.002;
double aa1,bb1;//aa1,bb1为滤波模板中的各权重。
//gguiyi高斯滤波的归一化系数,bguiyi双边滤波的归一化系数,gsum高斯滤波像素的加权和,bsum双边滤波像素的加权和。
double gguiyi=0.0,bguiyi=0.0,gsum=0.0,bsum=0.0;
//读取噪声图像
load_image_data();
x_size2=x_size1;
y_size2=y_size1;
//将读取的噪声图像赋给入力图像
for(i=0;i<y_size2;i++)
{
for(j=0;j<x_size2;j++)
{
d[i][j]=image1[i][j];
}
}
//高斯滤波,双边滤波处理噪声图像
for(i=0;i<y_size2;i++)
{
for(j=0;j<x_size2;j++)
{
for(k=-p;k<=p;k++)
{
for(l=-p;l<=p;l++)
{
m=i+k; n=j+l;
//abs()返回指定数字的绝对值
if(m<0) {m=abs(i+k)-1;} if(m>y_size2-1) {m=2*y_size2-i-k-1;}
if(n<0) {n=abs(j+l)-1;} if(n>x_size2-1) {n=2*x_size2-j-l-1;}
aa1=exp(-a1*(l*l+k*k));
bb1=exp(-b1*(d[i][j]-d[m][n])*(d[i][j]-d[m][n]));
bsum+=aa1*bb1*d[m][n];
bguiyi+=aa1*bb1;
}
}
f[i][j]=bsum/bguiyi;
gguiyi=0.0,bguiyi=0.0,gsum=0.0,bsum=0.0;
}
}
//将滤波后的像素赋给新的图像
for(i=0;i<y_size2;i++)
{
for(j=0;j<x_size2;j++)
{
image2[i][j]=(unsigned char)(f[i][j]+0.5);
}
}
save_image_data();
}
load_image_data()和save_image_data()分别是mypgm.h头文件里定义的读取和创建图像的方法
拜托大家啦!真的看了太久了!觉得公式什么的都对,就是双边滤波的结果不对,愁死啦!拜托大家帮帮忙!
...全文
516 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chanzhennan 2015-01-16
  • 打赏
  • 举报
回复
你将标准差d=3; 标准差r=10 ;5*5窗口试试
想飞的超人儿 2014-10-27
  • 打赏
  • 举报
回复
引用 3 楼 relaxisland 的回复:
结果哪里不对? 给个提示
就是双边滤波后的图像看着不是双边滤波,原图像上的噪声还在。
relaxisland 2014-10-26
  • 打赏
  • 举报
回复
结果哪里不对? 给个提示
想飞的超人儿 2014-10-24
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
参考 http://www.baidu.com/s?wd=%E5%8F%8C%E8%BE%B9%E6%BB%A4%E6%B3%A2+C%E6%BA%90%E4%BB%A3%E7%A0%81&rsv_spt=1&issp=1&f=8&rsv_bp=0&ie=utf-8&tn=94422606_hao_pg&rsv_sug3=6&rsv_sug=0&rsv_sug1=6&rsv_sug4=140&inputT=13860
原理和公式我都知道呀,就是这个程序不知道错在哪里,滤波的结果图不正确,用同一个程序进行高斯滤波就可以。能不能麻烦您帮我看看程序错哪了?拜托了,很苦恼!

19,472

社区成员

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

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