Filter median adalah teknik pemfilteran digital nonlinear yang biasa dipakai untuk menghilangkan derau pada citra atau sinyal. Pengurangan derau adalah langkah praolah untuk memperbaiki hasil pada pengolahan selanjutnya (misalnya deteksi pinggiran pada citra). Filter median dipakai luas dalam pengolahan citra digital karena dapat menghilangkan derau sekaligus menjaga pinggiran dalam keadaan tertentu. Selain itu, filter ini juga dipakai dalam pengolahan sinyal digital.
Penjelasan algoritme
Cara kerja filter ini adalah menggantikan nilai tiap entri dengan median dari entri-entri tetangga. Pola tetangga-tetangga disebut "jendela" yang bergeser entri demi entri untuk semua sinyal. Untuk sinyal satu dimensi, jendela yang mungkin hanyalah beberapa entri sebelum dan beberapa entri setelahnya. Untuk data dua dimensi atau lebih, jendela harus meliputi semua sumbu dengan jari-jari tertentu.
Contoh satu dimensi
Sebagai contoh, dengan jendela ukuran tiga yang berurutan: sebelumnya, dirinya, dan sesudahnya, filter median akan diterapkan untuk sinyal satu dimensi sebagai berikut.
x
2
3
80
6
2
3
y1
(2, 3, 80)
y2
(3, 6, 80)
y3
(2, 6, 80)
y4
(2, 3, 6)
y
3
6
6
3
Penanganan pada ujung
Pada contoh di atas, karena tiada nilai yang berada di sebelum entri pertama, nilai entri pertama tetap. Begitu juga untuk entri terakhir yang tidak memiliki entri sesudahnya. Ini adalah salah satu cara untuk menangani entri yang kosong pada ujung-ujung sinyal. Namun, ada cara-cara lain yang mungkin lebih dipilih dalam keadaan tertentu:
tidak mengolah ujung-ujung sinyal dengan atau tanpa pemangkasan ujung-ujung sinyal atau tepi citra setelahnya;
mengambil entri dari tempat lain, misal dari ujung satunya (di sisi lain); atau
memperkecil ukuran jendela pada ujung-ujungnya agar jendelanya terisi semua.
Kode semu untuk dua dimensi
Kode semu untuk filter median dua dimensi dapat berupa sebagai berikut:
misalkan I adalah larik dua dimensi berukuran w dan h sebagai nilai awal
misalkan T adalah larik dua dimensi berukuran w dan h sebagai nilai hasil
misalkan J adalah larik satu dimensi berukuran p × q sebagai jendela
tepiX ← bulatkanKeBawah(p / 2)
tepiY ← bulatkanKeBawah(q / 2)
untukxdaritepiXsampaiw - tepiX,
untukydaritepiYsampaih - tepiY,
i ← 0
untukfxdari 0 sampaip,
untukfydari 0 sampaiq,
J[i] ← I[y + fy - tepiY][x + fx - tepiX]
i ← i + 1
urutkan J
T[y][x] ← J[p × q / 2]
Algoritme ini hanya mengolah satu saluran dan menggunakan penanganan pertama, "tidak mengolah ujung-ujung sinyal."
Permasalahan dalam implementasi
Biasanya, mayoritas perhitungan dan waktu dihabiskan untuk mencari median tiap jendela. Karena filter harus mengolah tiap entri dalam sinyal, untuk sinyal berukuran besar seperti citra, efisiensi perhitungan median menjadi faktor penting dalam menentukan kelajuan algoritme. Implementasi naif yang dijelaskan di atas mengurutkan entri dalam jendela untuk mencari median. Namun, karena hanya nilai tengah yang dibutuhkan, algoritme seleksi bisa lebih efisien. Terlebih lagi, beberapa jenis sinyal (seringnya untuk citra) menggunakan bilangan bulat sehingga median histogram dapat jauh lebih efisien karena lebih mudah memperbarui histogram dari jendela ke jendela dan pencarian median sebuah histogram tidak terlalu memberatkan.[1]
Sifat penjagaan pinggiran
Pemfilteran median termasuk teknik penghalusan seperti pemfilteran Gauss linear. Semua teknik penghalusan efektif dalam menghilangkan derau dalam daerah halus sinyal, tetapi memengaruhi pinggiran. Sering, selain butuh mengurangi derau, pinggiran juga perlu dipertahankan. Pinggiran penting untuk tampilan visual citra, misalnya. Untuk tingkat derau Gauss rendah atau menengah, filter median lebih baik daripada pemburaman Gauss dalam mengurangi derau sekaligus menjaga pinggiran pada jendela berukuran tetap.[2] Namun, kinerjanya tidak lebih baik daripada pemburaman Gauss untuk tingkat derau tinggi. Untuk derau butiran dan derau garam–merica, filter median cukup efektif.[3] Karenanya, filter median dipakai luas dalam pengolahan citra digital.