|
Post by huangno1 on Mar 2, 2017 20:17:48 GMT -8
程式說明
在影像濾波中,中值濾波器是一種常被使用的非線性濾波器,它的運作原理是將目前所在元素與左右相鄰元素合併為一組處理單元,並將處理單元內的三個值排序,使用排序後的中間數取代目前所在元素,如此便可抑制訊號中的突波及雜訊。數列的第一個元素的左元素假設為 0,數列的最後一個元素的右元素也假設為 0。
例一:
濾波前之數列: 3 2 9
濾波後之數列: 2 3 2
例二:
濾波前之數列: 3 3 5 3 3 9 4 4 4
濾波後之數列: 3 3 3 3 3 4 4 4 4
本題輸入時首先輸入數列的數值個數 n (1 <= n <= 10),接著會輸入 n 個整數值。請輸出濾波後的數列。
本題需撰寫一個函式 median():median() 有三個整數參數 a, b 和 c,呼叫端會傳入三個整數值。本函式將回傳一個整數,代表三個數排序後的中間數。
【輸入輸出範例】
3
3 2 9
Result: 2 3 2
#include <stdio.h>
int median ( int a , int b , int c )
{
if ( a >= b && a >= c )
{
if ( b >= c ) return b ;
else return c ;
}
if ( b >= a && b >= c )
{
if ( a >= c ) return a ;
else return c ;
}
if ( c >= b && c >= a )
{
if ( b >= a ) return b ;
else return a ;
}
}
int main()
{
int n = 0,
in [ 100 ] = { }
;
scanf("%d", &n);
for (int i=1; i<=n; i+=1)
{
scanf("%d", &in);
}
printf("Result: ");
for (
int i = 1 ; i <= n ; i ++
)
{
printf("%d ",
median( in [ i - 1 ] , in [ i ] , in [ i + 1 ] )
);
}
printf("\n");
return 0;
}
|
|