日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言均值滤波程序,均值滤波C语言代码实现的一种简单方式

發布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言均值滤波程序,均值滤波C语言代码实现的一种简单方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算均值濾波時,需要每次求數組的和,再求均值,一般先放入一個數組,循環移出最后一個舊的值循環移入新的值

一般原來的做法

/******************************************************************************/

/**

* @param[in] data[3] 每次處理一組三維的數據,每個數據都需要均值濾波

* fifo:中間存數據的數組三維數組,在使用前定義

* len: N個值的均值濾波,比如len=5,代表5個點取一個均值

* output:均值濾波后的數據,三維的

* idx:均值濾波后的值對應的下標

* @return

*

*

*******************************************************************************/

void AvgFilter1(float data[3], float fifo[][FILTER_SIZE], int len, float output[][BUF_SIZE], int idx)

{

float sum1, sum2, sum3;

uint8_t i;

//mexPrintf("%d", data[1]);

for (i = 1; i < len; i++)

{

fifo[0][i - 1] = fifo[0][i];

fifo[1][i - 1] = fifo[1][i];

fifo[2][i - 1] = fifo[2][i];

}

fifo[0][len - 1] = data[0];

fifo[1][len - 1] = data[1];

fifo[2][len - 1] = data[2];

sum1 = 0;

sum2 = 0;

sum3 = 0;

for (i = 0; i < len; i++)

{

sum1 += fifo[0][i];

sum2 += fifo[1][i];

sum3 += fifo[2][i];

}

output[0][idx] = (sum1 / len);

output[1][idx] = (sum2 / len);

output[2][idx] = (sum3 / len);

//mexPrintf("output:\n");

if (idx== BUF_SIZE)

{

for (i=0;i

可以修改為新的做法

/******************************************************************************/

/** SIZE: 相當于len, 均值濾波的個數

* @param[in] deal with data one by one and get the average

* data: three axis' data

* fifo: Cache intermediate data

* len: the length of average's data

* output: output of average's data

* @return

*

*

*******************************************************************************/

void AvgFilter(float data[3], float fifo[][SIZE], float output[][BUF_SIZE], int idx)

{

/* filter_buff, FILTER_SIZE */

static uint8_t data_index = 0;

static float sum_x=0, sum_y=0, sum_z=0;

float fir_x, fir_y, fir_z;

uint8_t fir_pos;

/* find the index-9' data */

fir_x = fifo[0][data_index];

fir_y = fifo[1][data_index];

fir_z = fifo[2][data_index];

fifo[0][data_index] = data[0];

fifo[1][data_index] = data[1];

fifo[2][data_index] = data[2];

data_index = (data_index + 1) % SIZE;

sum_x += data[0];

sum_y += data[1];

sum_z += data[2];

sum_x -= fir_x;

sum_y -= fir_y;

sum_z -= fir_z;

output[0][idx] = (sum_x / SIZE);

output[1][idx] = (sum_y / SIZE);

output[2][idx] = (sum_z / SIZE);

}

這樣運算量大大減少,將數據存放到一個數組組成的環形buffer中,每次取當前index的前一個value[index],在sum和中減去value,再加上新的數據,即為當前數組的數據和,再求均值。

總結

以上是生活随笔為你收集整理的c语言均值滤波程序,均值滤波C语言代码实现的一种简单方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。