由于项目上要用到平滑一维数组数据,参考Matlab  smooth函数转成c++代码

//x,g均为数组,具体内容略

plot(x,g);hold on,plot(x,smooth(g,50),‘r‘);

z1= (g1-smooth(g1,50)‘); figure,plot(x,z1,‘.-‘)

蓝色为平滑前,红色为平滑后

为了要找到缺陷,即灰度值突变很大地方,可以平滑前后相减,注意这里平滑窗宽尽量选大,选择原则是较小甚至不影响缺陷突变的地方

平滑前后相减

举例

例如g=[1 2 1 5 1 1 1 3 1 1 1]

smooth(g,5)‘

ans =

1.0000    1.3333    2.0000    2.0000    1.8000    2.2000    1.4000    1.4000    1.4000    1.0000    1.0000

smooth(g,10)‘

ans =

1.0000    1.3333    2.0000    1.7143    1.7778    1.7778    1.6667    1.2857    1.4000    1.0000    1.0000

以窗宽10为例(因为除的奇数,所以最大为9)  (matlab下标以1开始,而vc从0开始)

令b=(k-1)/2;

当i小于b时

Y[0]=g[0] =1

Y[1]=(g[0]+g[1]+g[2])/3=4/3=1.3333

Y[2]=(g[0]+g[1]+g[2]+g[3]+g[4])/5=2

Y[3]=(g[0]+g[1]+g[2]+g[3]+g[4]+g[5]+g[6])/7=1.7143

Y[3]= (g[3+(-3)]+g[3+(-2)]+g[3+(-1)]+g[3+(0)]+g[3+1]+g[3+2]+g[3+3])/(2*3+1)

那么从j=-i:i    (这里k是变动的)

Y[i]=0;

For( j=-i;j

{

Y[i]+=g[i+j]

}

Y[i]=y[i]/(2*i+1);

当i大于等于时 ,同时length(g)-i>b  (这里k是固定的)

如果n为偶数,那么应该是k=n-1;然后范围是-(k-1)/2: (k-1)/2   b=(k-1)/2

Y[4]=(g[0]+g[1]+g[2]+g[3]+g[4]+g[5]+g[6] +g[7]+g[8])/9=1.7778

Y[5]=(g[1]+g[2]+g[3]+g[4]+g[5]+g[6] +g[7]+g[8] +g[9])/9=1.7778

Y[6]=(g[2]+g[3]+g[4]+g[5]+g[6]+g[7]+g[8] +g[9]+g[10])/9=1.6667

Y[6]= (g[6+(-4)]+g[6+(-3)]+g[6+(-2)]+g[6+(-1)]+g[6]+g[7]+g[8] +g[9]+g[10])/9…..

Y[i]=(g[i+(-b)]+g[i+(-b+1)]+g[i+(-b+2)]+g[i+(-b+3)]+g[i+(-b+4)]+g[i+(-b+5)]+g[i+(-b+6)] +g[i+(-b+7)]+g[i+(-b+8)])/k

-b:b即

If(i>b)||(i=b)

{

Y[i]=0;

For( j=-b;j

{

Y[i]+=g[i+j]

}

Y[i]=y[i]/k;}

当i大于b同时length(g)-i<=b从后往前推

Y[7]=( g[4]+ g[5]+g[6]+g[7]+g[8] +g[9]+g[10])/7=1.2857

Y[8]=( g[6]+g[7]+g[8] +g[9]+g[10])/5=1.4

Y[9]=(g[8] +g[9]+g[10])/3=1

Y[10]=(g[10] =1

当i=7时,i1=10-7=3

那么Y[7]= (g[7+(-3)]+g[7+(-2)]+g[7+(-1)]+g[7+(0)]+g[7+1]+g[7+2]+g[7+3])/(2*3+1)

当i=8时,i1=2

那么Y[8]= (g[8+(-2)]+g[8+(-1)]+g[8+(0)]+g[8+1]+g[8+2])/(2*2+1)

令 i1=(n-1)-i,那么从-i1:i1

Y[i]=0;

For( j=-i1;j

{

Y[i]+=g[i+j]

}

Y[i]=y[i]/(2*i1+1);

C++代码如下,nn为数组元素个数;

int b=(k-1)/2;

vectorZ(nn);if(nn>k)

{for(int i=0;i

{if(i

{

Z[i]=0;for(int j=-i;j

{

Z[i]+=D[i+j];

}

Z[i]=Z[i]/(2*i+1);

}if(((i>b)||(i=b))&((nn-i)>b))

{

Z[i]=0;for( int j=-b;j

{

Z[i]+=D[i+j];

}

Z[i]=Z[i]/k;

}else{

Z[i]=0;int i1=(nn-1)-i;for( int j=-i1;j

{

Z[i]+=D[i+j];

}

Z[i]=Z[i]/(2*i1+1);

}

}

}

平滑前

平滑后

平滑前后相减

原文:https://www.cnblogs.com/sggggr/p/12506378.html

matlab smooth原理,Matlab smooth函数原理相关推荐

  1. MATLAB中移动平均滤波器smooth函数的用法

    文章目录 1 smooth的函数原型 2 yy = smooth(y)解析 3 yy = smooth(y,span)解析 4 yy = smooth(y,span,method)解析 5 smoot ...

  2. matlab里面q函数,q函数原理及matlab计算

    q函数原理及matlab计算 1 误差函数定义为它的性质如下:2 互补误差函数定义为它具有如下性质:3 Q 函数与误差函数的关系Matlab 中没有 Q 函数,所以此时不能直接使用 Q 函数,解决方法 ...

  3. Matlab中sub2ind函数原理及用法!

    Matlab中sub2ind函数原理及用法!

  4. histeq matlab原理,MATLAB中histeq的原理以及自写的具体实现函数

    1.什么是直方图? 直方图是数字图像处理中一个简单而重要的常用工具,它从总体上刻画了一幅图像的灰度内容. 具体来说,直方图描述的是图像中具有各灰度级的出现的概率(像素的个数),其横坐标为灰度级,纵坐标 ...

  5. histeq从用法到原理——Matlab直方图均衡化函数

    转载于http://blog.sina.com.cn/s/blog_14d1511ee0102wwyt.html (公式未正常显示,请看原文链接) 一.用法 histeq是Matlab中的一个工具箱函 ...

  6. matlab光顺拐点,Matlab的smooth方法(降噪\光顺\移动平均)

    对于需要对原始数据降噪和光顺处理的需求,matlab提供了一个基础的湍动平均函数 语法 y = smooth(y) gpuarrayYY = smooth(gpuarrayY) yy = smooth ...

  7. matlab工具箱三维还原原理,matlab三维重建工具箱

    MATLAB的血管三维重建源代码_基础医学_医药卫生_专业资料.图片下载 2001 数学建模 A 题 附录 1:图像二值矩阵的 0-1 互换的 matlab 程序代码(zhuanhua.m) .... ...

  8. matlab光场成像,光场相机重聚焦原理③——Matlab光场工具包使用重聚焦及多视角效...

    光场相机重聚焦原理③--Matlab光场工具包使用重聚焦及多视角效 光场相机重聚焦原理③--Matlab光场工具包使用.重聚焦及多视角效果展示 目录 1.从相机里导出白图像(White Images) ...

  9. 通信原理matlab实验课程设计,通信原理matlab课程设计报告

    通信原理matlab课程设计报告 1 目录 一问题描述-----------------------------------------3 二实验原理------------------------- ...

  10. MATLAB BPSK通信系统调制解调仿真原理及代码(二)

    此仿真是瑞丽衰落信道与高斯信道的仿真对比,高斯信道的原理及仿真代码前文已有讲述. 高斯信道下的原理及代码请见 MATLAB BPSK通信系统调制解调仿真原理及代码(一)_惜洛-Jankin的博客-CS ...

最新文章

  1. VS Code上也能玩转Jupyter Notebook,这是一份完整教程
  2. linux下创建多进程,linux之多进程fork:进程创建
  3. jpa postgresql 使用uuid作为主键
  4. 小程序 input 换行_小程序 input双向数据绑定
  5. 银行各类理财收益渐涨 各类宝钱景尚不明朗
  6. SQL Server游标+延迟执行简介
  7. 基于SSM实现的网上书城系统【附源码】(毕设)
  8. 锐捷云教室 服务器型号,锐捷智慧云课堂方案(云教室+简单)
  9. 关于datetimepicker 鼠标滚动调节日期变化遇到的问题
  10. 转载nbsp;图像阈值选取
  11. qq企业邮箱创建过程
  12. Android网络通信(一)
  13. strcpy s 的用法
  14. APP定制开发,移动市场重要的生存利器
  15. 图像去噪,深度学习去噪,普通方法
  16. obv代码matlab,obv指标源代码,标准obv指标源代码
  17. 读《微波工程(第三版)》笔记 (4:波方程和基本平面波的解)
  18. c4d安装没有出现语言文字,c4d中文教程大合集 HDT映速教程 C4D自学全攻略(四部全集)...
  19. 【Cesium】Cesium学习之CZML的使用
  20. 全志H3 linux系统recovery制作过程

热门文章

  1. 996 icu 不算什么?生活在继续
  2. 分享72个PHP源码,总有一款适合您
  3. 神经网络pid控制器MATLAB,基于BP神经网络的PID控制器及其MATLAB仿真.pdf
  4. 智邦国际CRM系统核心功能作用
  5. HCNP——动态路由协议及分类和最长前缀匹配
  6. DTOJ 2313:定价(absurd)
  7. JavaScript 语言入门
  8. 锐捷NBR100恢复出厂设置
  9. 深度学习评价指标总结及代码实现
  10. keras2onnx转换时出现AttributeError: ‘KerasTensor‘ object has no attribute ‘graph’错误