用C++语言实现中值滤波
问题描述
- 精选答案
-
第一步是放置窗口,这里我们通过改变开始的索引值来放置窗口。
// Move window through all elements of the signal
for (int i = 2; i < N - 2; ++i)
注意,我们是从第三个元素开始,倒数第三个元素结束。问题就是我们无法从第一个元素开始,因为在这种情况下,过滤窗口的左半部分是空的。我们将在之后讨论如何解决这个问题。
第二步就是取出窗口中的元素。
// Pick up window elements
for (int j = 0; j < 5; ++j)
window[j] = signal[i - 2 + j];
第三步就是把窗口中的元素排序。但是在这里我们将会使用一个代码优化的技巧。由于我们需要的仅仅是中值,所以我们只要给一半的元素排序就可以了。
// Order elements (only half of them)
for (int j = 0; j < 3; ++j)
{
// Find position of minimum element
int min = j;
for (int k = j + 1; k < 5; ++k)
if (window[k] < window[min])
min = k;
// Put found minimum element in its place
const element temp = window[j];
window[j] = window[min];
window[min] = temp;
}
最后一步——取中值。
// Get result - the middle element
result[i - 2] = window;
最后,让我们把整个算法写成函数的形式,
// 1D MEDIAN FILTER implementation
// signal - input signal
// result - output signal
// N- length of the signal
void _medianfilter(const element* signal, element* result, int N)
{
// Move window through all elements of the signal
for (int i = 2; i < N - 2; ++i)
{
// Pick up window elements
element window;
for (int j = 0; j < 5; ++j)
window[j] = signal[i - 2 + j];
// Order elements (only half of them)
for (int j = 0; j < 3; ++j)
{
// Find position of minimum element
int min = j;
for (int k = j + 1; k < 5; ++k)
if (window[k] < window[min])
min = k;
// Put found minimum element in its place
const element temp = window[j];
window[j] = window[min];
window[min] = temp;
}
// Get result - the middle element
result[i - 2] = window;
}
}
类型element可以这样定义:
typedef double element;
1
猜你喜欢内容
-
简单网:构建全网教育数据枢纽,让知识检索化繁为...
简单网:构建全网教育数据枢纽,让知识检索化繁为“简”回答数有0条优质答案参考
-
去三亚有什么好玩的地方
去三亚有什么好玩的地方回答数有1条优质答案参考
-
石狮一日游必去景点推荐
石狮一日游必去景点推荐回答数有1条优质答案参考
-
电气工程师的证书考取条件是什么
电气工程师的证书考取条件是什么回答数有1条优质答案参考
-
房地产估价师的具体报考条件有啥
房地产估价师的具体报考条件有啥回答数有1条优质答案参考
-
房产经纪人的工作内容具体包含什么
房产经纪人的工作内容具体包含什么回答数有1条优质答案参考
-
学习小提琴都有哪些难点
学习小提琴都有哪些难点回答数有1条优质答案参考
-
企业行政管理证书的含金量怎么样
企业行政管理证书的含金量怎么样回答数有1条优质答案参考
-
初学者要怎么入门小提琴
初学者要怎么入门小提琴回答数有1条优质答案参考
-
报考珠宝鉴定师要啥条件
报考珠宝鉴定师要啥条件回答数有1条优质答案参考
















