matlab转化成c语言的问题不会了

bluesmile2012 2013-04-15 07:43:01
一张1024*1024像素的图片,每个像素的背景噪声是BgNoiseLevel,然后转化成c语言,怎么弄的啊
%% 求固定模式噪声的全图的一个均值和一个方差
mDark = mean2(BgNoiseLevel); % 固定模式噪声的均值
vDark = std2(BgNoiseLevel); % 固定模式噪声的标准差
[r,c,v]=find(abs(BgNoiseLevel-mDark)>6*vDark)
total=sum(v); % 统计总个数
% %%%%%%%% 剔除粗大误差 %%%%%%% %
if total>0
for i=1:total
BgNoiseLevel(r(i),c(i))=mDark; % 剔除粗大误差(或 坏点,奇点噪声),并用均值替换
end
mDark = mean2(BgNoiseLevel); % 固定模式噪声的均值
vDark = std2(BgNoiseLevel); % 固定模式噪声的标准差
[r,c,v]=find(abs(BgNoiseLevel-mDark)>6*vDark);
total=sum(v);
end
...全文
3014 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
反弹让他 2013-08-29
  • 打赏
  • 举报
回复
引用 6 楼 lhfslhfs 的回复:
MATLAB转成的C基本都是垃圾。还是手工写吧,有点技术含量。
正解!
leexinbill 2013-04-21
  • 打赏
  • 举报
回复
搞不懂呀,感觉不会,积分到手了
Lionheartch 2013-04-20
  • 打赏
  • 举报
回复
引用 7 楼 bluesmile2012 的回复:
Quote: 引用 5 楼 vipxuliang 的回复: 你这是要读入纯噪声图片,然后统计噪声参数并去除粗大误差是吗? raw格式数据不太好操作,我写了一个bmp的,你可参考。 噪声图片是我用matlab生成的,以下用到了opencv的图像类。 非专业码农,敲代码辛苦,忘楼主加分。 谢谢你啊,还有模拟噪声的,就是生成对数正态随机分布和泊松分布的,怎……
matlab random函数就可生成各种模式的噪声。在这里发站内联系就可以
bluesmile2012 2013-04-20
  • 打赏
  • 举报
回复
[quote=引用 5 楼 vipxuliang 的回复:] 你这是要读入纯噪声图片,然后统计噪声参数并去除粗大误差是吗? raw格式数据不太好操作,我写了一个bmp的,你可参考。 噪声图片是我用matlab生成的,以下用到了opencv的图像类。 非专业码农,敲代码辛苦,忘楼主加分。 谢谢你啊,还有模拟噪声的,就是生成对数正态随机分布和泊松分布的,怎么联系你啊
赵4老师 2013-04-20
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。
青松2 2013-04-19
  • 打赏
  • 举报
回复
MATLAB转成的C基本都是垃圾。还是手工写吧,有点技术含量。
Lionheartch 2013-04-19
  • 打赏
  • 举报
回复
你这是要读入纯噪声图片,然后统计噪声参数并去除粗大误差是吗?
raw格式数据不太好操作,我写了一个bmp的,你可参考。
噪声图片是我用matlab生成的,以下用到了opencv的图像类。
非专业码农,敲代码辛苦,忘楼主加分。
#include<iostream>
#include<math.h>
#include<string>
#include<cv.h>
#include<cxcore.h>
#include<highgui.h>
using std::cout;
using std::endl;

double Func_mean2(unsigned char* BgNoiseLevel,int len)//求均值
{
double sum = 0,average = 0;
for(int i=0;i<len;i++)
{
sum += BgNoiseLevel[i];
}
average = sum/static_cast<double>(len);
return average;
}
double Func_std2(unsigned char* BgNoiseLevel,int len)//求标准差无偏估计
{
double average = Func_mean2(BgNoiseLevel,len);
double sum_squared = 0,stdeviation = 0;
for(int i=0;i<len;i++)
{
sum_squared += (BgNoiseLevel[i]-average)*(BgNoiseLevel[i]-average);
}
stdeviation = pow((sum_squared/static_cast<double>(len-1)),0.5);
return stdeviation;
}
double* RemoveGrossError(unsigned char* BgNoiseLevel, int len)//去除粗大误差点
{
int GrossErrorNum=0;
int interationNum = 0;
double result[2] = {0};
double average = Func_mean2(BgNoiseLevel,len);
double stdeviation = Func_std2(BgNoiseLevel,len);
for(int i=0;i<len;i++)
{
if((static_cast<double>(BgNoiseLevel[i])-average)>stdeviation*6)
{
BgNoiseLevel[i] = average;
++GrossErrorNum;
}
}
if(GrossErrorNum!=0/*&&interationNum<5*/) //优化次数可参考设置
{
interationNum++;
RemoveGrossError(BgNoiseLevel,len);
}
result[0] = average;
result[1] = stdeviation;
return result;
}

int main()
{
double *avgstd = new double[2];
char* imagename = new char[10];
char* outImageName = new char[10];
int inamenum = 60000;
int onamenum = 10000;
char* imagesuffix = ".bmp";
for(char ii=0;ii<20;ii++)
{
inamenum++;
onamenum++;
_itoa(inamenum,imagename,10);
_itoa(onamenum,outImageName,10);
strcpy(imagename+5,imagesuffix);
strcpy(outImageName+5,imagesuffix);
IplImage* preadimg=NULL;
unsigned char* imgdata;
int height = 0,width = 0;
preadimg = cvLoadImage(imagename,0);
imgdata = (unsigned char*)preadimg->imageData;
height = preadimg->height;
width = preadimg->width;
avgstd = RemoveGrossError(imgdata,height*width);
cout<<"average = "<<avgstd[0]<<
endl<<"stdeviation = "<<avgstd[1]<<endl;
cvSaveImage(outImageName,preadimg);
cvReleaseImage(&preadimg);
}
system("pause");
return 0;
}


运行结果如下
bluesmile2012 2013-04-18
  • 打赏
  • 举报
回复
引用 2 楼 vipxuliang 的回复:
bgnoiselevel 函数发出来看看 ps: 非高手
clc; clear all; format long ImageMat=zeros(20,1024,1024); %20幅黑图,读入三维矩阵; for m=1:20 handle=fopen(strcat('D:\科研\FiveOtwo\电子星模拟器\测试\某型产品的20张黑图\2013032407203',int2str(6000+m),'.raw'),'r'); ImageMat(m,:,:)=fread(handle,[1024,1024],'uint16=>single'); end BgNoiseLevel=squeeze(mean(ImageMat(1:20,:,:))); %BackGroundNoiseLevel 由1×1024×1024变为1024×1024 BgNoiseStd=squeeze(std(ImageMat(1:20,:,:))); %BackGroundNoiseStd 由1×1024×1024变为1024×1024
AnYidan 2013-04-15
  • 打赏
  • 举报
回复
matlab 有专用的tool 转换
Lionheartch 2013-04-15
  • 打赏
  • 举报
回复
bgnoiselevel 函数发出来看看 ps: 非高手
bluesmile2012 2013-04-15
  • 打赏
  • 举报
回复
有些问题不好描述,有没有壮士留下qq帮帮我啊

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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