// Median.v メディアンフィルタモジュール
#define S_LENGTH 9 // ソート列の長さ
#define C_SIZE 1 // キャッシュの半径
// 配列をソートし、その中央値を返します
int Sorting(int SortLine[S_LENGTH])
{
int i,j,temp;
// ソート列をソーティングします(単純比較ソート)
for(i = 0; i < S_LENGTH-1; i++){
for(j = i+1; j < S_LENGTH; j++){
if(SortLine[i] > SortLine[j]){
temp = SortLine[i];
SortLine[i] = SortLine[j];
SortLine[j] = temp;
}
}
}
return SortLine[S_LENGTH/2];
}
// メディアンフィルタモジュールメイン部分
module Median(in:input,out:output)
int in on pixel cache C_SIZE;
int out on pixel;
{
parallel{
int i,j; // ループ変数
int SortLine[S_LENGTH]; // ソートを行なうための配列
int count = 0; // 配列の添字
// 注目画素と近傍画素をソート列に格納
for(i = -C_SIZE; i < C_SIZE+1; i++){
for(j = -C_SIZE; j < C_SIZE+1; j++){
SortLine[count++] = in[i][j];
}
}
// ソートされた配列の中央の値を出力とする。
out[][] = Sorting(SortLine);
}
}
フィルタリングメインフローへ戻る
VIOS トップページ