matlab转化成c语言的问题不会了
一张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
MATLAB C
[解决办法]
你这是要读入纯噪声图片,然后统计噪声参数并去除粗大误差是吗?
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;
}