Saturday 19 August 2017

Moving average filter verilog code


Filter rata-rata, atau Kategori filter rata-rata. Pengembangan perangkat lunak digital signal and image processing (DSP dan DIP). Abstrak. Artikel ini adalah panduan praktis untuk filter rata-rata, atau pemahaman dan penerapan filter rata-rata. Artikel berisi teori, kode sumber C, instruksi pemrograman dan contoh aplikasi. 1. Pengantar filter rata-rata, atau rata-rata filter Mean filter. Atau filter rata-rata filter berjendela dari kelas linier, yang menghaluskan sinyal (gambar). Filter bekerja sebagai low-pass one. Ide dasar di balik filter adalah untuk setiap elemen sinyal (gambar) yang rata-rata berada di sekitar lingkungannya. Untuk memahami bagaimana hal itu dilakukan dalam praktik, mari kita mulai dengan ide jendela. 2. Filter window atau mask Mari kita bayangkan, Anda harus membaca sepucuk surat dan apa yang Anda lihat di teks dibatasi oleh lubang di stensil khusus seperti ini. Jadi, hasil pembacaannya terdengar t. Ok, mari kita baca suratnya lagi, tapi dengan bantuan stensil lain: Nah hasil baca t adalah suara 240. Mari kita coba yang ketiga: Sekarang kamu sedang membaca huruf t seperti suara 952. Apa yang terjadi disini Untuk mengatakannya Dalam bahasa matematika, Anda sedang melakukan operasi (membaca) atas elemen (huruf t). Dan hasilnya (suara) tergantung pada lingkungan elemen (huruf di sebelah t). Dan stensil itu, yang membantu mengambil lingkungan elemen, adalah jendela Ya, jendela hanyalah stensil atau pola, dengan mana Anda memilih elemen lingkungan 0151 seperangkat elemen di sekitar yang diberikan 0151 untuk membantu Anda membuat keputusan. Nama lain untuk filter window adalah mask topeng 0151 yang merupakan stensil, yang menyembunyikan elemen yang tidak kita perhatikan. Dalam contoh kita elemen yang kita operasikan pada posisi paling kiri di jendela, namun posisinya yang biasa adalah pusat jendela. Mari kita lihat beberapa contoh jendela. Dalam satu dimensi Ara. 4. Jendela atau topeng ukuran 5 di 1D. Dalam dua dimensi. Ara. 5. Jendela atau topeng ukuran 3times3 di 2D. Dalam tiga dimensi. Pikirkan tentang membangun. Dan sekarang mdash tentang ruangan di gedung itu. Ruangannya seperti jendela 3D, yang memotong beberapa subruang dari keseluruhan ruang bangunan. Anda dapat menemukan jendela 3D dalam volume (voxel) pengolahan gambar. 3. Memahami mean filter Sekarang mari kita lihat, bagaimana cara meluangkan rata-rata seluruh elemen lingkungan. Rumusnya adalah jumlah elemen sederhana 0151 dan membagi jumlahnya dengan jumlah elemen. Sebagai contoh, mari kita hitung rata-rata untuk kasus ini, yang digambarkan pada gambar ara. 7. Ara. 7. Mengambil rata-rata. Dan itu saja. Ya, kami hanya memfilter sinyal 1D dengan filter rata-rata Mari kita buat resume dan tuliskan instruksi langkah-demi-langkah untuk diproses dengan filter rata-rata. Filter rata-rata, atau algoritma filter rata-rata: Tempatkan sebuah jendela di atas elemen Ambil rata-rata 0151 jumlah elemen dan bagi jumlah dengan jumlah elemen. Sekarang, ketika kita memiliki algoritma, sekarang saatnya untuk menulis beberapa kode mdash mari kita turun ke pemrograman. 4. Pemrograman filter 1D berarti Pada bagian ini kita mengembangkan filter mean 1D dengan jendela ukuran 5. Mari kita memiliki sinyal 1D dengan panjang N sebagai masukan. Langkah pertama adalah menempatkan jendela 0151 kita melakukannya dengan mengubah indeks elemen utama: Perhatikan, kita mulai dengan elemen ketiga dan finishing dengan yang terakhir tapi dua. Masalahnya adalah kita tidak bisa memulai dengan elemen pertama, karena dalam kasus ini bagian kiri dari jendela filter kosong. Kita akan bahas di bawah ini, bagaimana cara mengatasi masalah itu. Langkah kedua adalah mengambil rata-rata, ok: Sekarang, mari kita tuliskan algoritma sebagai fungsi: Ketik elemen dapat didefinisikan sebagai: 5. Mengobati tepi Untuk semua filter jendela ada beberapa masalah. Itu adalah tepi yang merawat. Jika Anda menempatkan jendela di atas elemen pertama (terakhir), bagian kiri (kanan) jendela akan kosong. Untuk mengisi celah, sinyal harus diperpanjang. Untuk filter rata-rata ada baiknya untuk memperpanjang sinyal atau gambar secara simetris, seperti ini: Jadi, sebelum melewati sinyal ke fungsi filter rata-rata, sinyal harus diperluas. Mari kita tulis pembungkusnya, yang membuat semua persiapan. Seperti yang Anda lihat, kode kita mempertimbangkan beberapa masalah praktis. Pertama-tama kita periksa parameter masukan kita sinyal 0151 jangan sampai NULL, dan panjang sinyal harus positif: Langkah kedua 0151 kita cek kasus N1. Kasus ini spesial, karena untuk membangun ekstensi minimal dibutuhkan dua elemen. Untuk sinyal 1 elemen panjang hasilnya adalah sinyal itu sendiri. Serta perhatikan, filter rata-rata kita bekerja di tempat, jika hasil parameter parameternya adalah NULL. Sekarang mari kita alokasikan memori untuk perpanjangan sinyal. Dan periksa alokasi memori. Pelaporan FIR Filtering di C (Bagian 3) Bagian 2 menunjukkan contoh filter FIR di C dengan menggunakan fixed point. Tutorial tentang FIR filtering ini menunjukkan bagaimana menerapkan beberapa filter FIR yang berbeda ke data masukan yang sama. Contoh untuk bagian ini juga berada pada titik tetap. Contohnya adalah file C tunggal dengan kode filter FIR di bagian atas, dan sebuah program uji kecil di bagian bawah. Dalam implementasi yang sebenarnya, Anda mungkin ingin membagi kode menjadi beberapa file. Klik link berikut untuk contoh kode versi PDF: Contoh kode ditunjukkan di bawah ini: Ada beberapa perbedaan dari contoh kode Bagian 2. Pertama, saya telah membuat sebuah fungsi untuk menyimpan sampel masukan ke array sampel masukan. (FirstoreNewSamples). Fungsi ini disebut sekali untuk setiap blok sampel masukan yang diproses. Fungsi pemanggilan melewati pointer ke sampel masukan baru, dan jumlah sampel baru yang akan disalin. Fungsi mengembalikan alamat untuk menerapkan filter FIR. Kedua, saya telah menambahkan sebuah fungsi untuk memindahkan sampel setelah memproses satu blok sampel (firMoveProcSamples). Sekali lagi, fungsi ini disebut sekali per blok sampel, tidak sekali per filter FIR diterapkan. Fungsi pemfilteran FIR (firFixed) memiliki daftar argumen yang sama seperti pada contoh Bagian 2, namun argumen masukan sedikit berbeda dalam kasus ini. Penunjuk masukan yang dilewatkan harus berupa alamat yang dikembalikan dari fungsi firStoreNewSamples, bukan pointer ke buffer sampel masukan. Program uji menunjukkan contoh di mana dua filter FIR berbeda diterapkan pada data output yang sama. File masukan pertama dibuka (untuk sampel masukan) dan dua file output dibuka (satu untuk setiap filter). Pada contoh pemrosesan loop, blok hingga 80 sampel dibaca dan disimpan ke dalam array kerja untuk filter. Selanjutnya, filter tap bandpass 63 diterapkan dengan memanggil firFixed, dan blok sampel output ditulis ke file. Setelah itu, 8 tap moving average filter diterapkan, dan sampel output ditulis ke file yang berbeda. Akhirnya, buffer sampel digeser untuk mempersiapkan blok sampel masukan berikutnya. Kode yang telah saya tunjukkan berguna untuk banyak filter yang ingin Anda terapkan. Ingatlah untuk mencatat panjang tap tap maksimum, dan masukan ukuran blok sampel, dan ubahlah pernyataan yang didefinisikan secara tepat. Itu menyimpulkan tutorial saya tentang filter FIR dasar. Seperti ini: Tinggalkan Balasan Batalkan balasan Terima kasih banyak atas pengeposan tutorial yang sangat bagus. Saya ingin menerapkan contoh Anda ke controller AVR Atmega16. Aku punya fungsi ADC ReadADC (0x00) yang membaca nilai 10bits dari ADC Registers. Dimana saya harus memasukkan nilai ADC ke contoh di atas. Saya baru mengenal program pengendali, saya akan berterima kasih atas saran dan saran Anda. Tolong tuntulah saya dimana saya harus membuat perubahan yang diperlukan di contoh di atas. Abdul, terimakasih atas pujiannya. Anda harus membaca sampel ADC Anda ke dalam array dan kemudian meneruskan alamat array itu ke fungsi firFixed sebagai argumen kedua. Dalam program utama, saya membaca contoh dari sebuah file ke dalam array yang disebut 8220input8221. Dalam kode Anda, Anda harus membaca sampel ADC ke array yang serupa. Pada contoh saya telah mengolah 80 sampel sekaligus, namun Anda harus mengubah nilai ini sesuai dengan kebutuhan aplikasi Anda. Memproses satu sampel sekaligus akan meminimalkan penundaan melalui filter, tapi akan menjadi yang paling mahal dalam hal siklus. Dear Shawn, terima kasih atas balasanmu Saya telah membaca nilai ADC sebagai inputSAMPLESADCRead (0x00), dan meneruskan alamat inputSAMPLES ke fungsi firStoreNewSamples seperti inp firStoreNewSamples (ampinputSAMPLES, size). Saya bingung tentang ukuran integer. Seperti ukuran panjangnya, tolong beri tahu saya apa yang seharusnya menjadi nilai ukuran. Karena fungsi FirFixed memiliki lima argumen sebagai firFixed (coeffs, inp, output, size, FILTERLEN) dan inp dibaca dari firstoreNewSamples. Program saya tercantum di bawah ini dengan baik chek itu. Saya akan berterima kasih kepada anda, terima kasih. Termasuk termasuk define define ADCVREFTYPE 0x20 define PWM1DCReg OCR1A jumlah maksimum input yang dapat ditangani dalam satu fungsi call define MAXINPUTLEN 25 panjang maksimum filter daripada yang dapat ditangani define MAXFLTLEN 16 buffer untuk menahan semua sampel masukan menentukan BUFFERLEN (MAXFLTLEN 8211 1 MAXINPUTLEN ) Array untuk menahan sampel masukan int16t insamp BUFFERLEN define SAMPLES 25 FIR init void firFixedInit (void) memset (insamp, 0, sizeof (insamp)) menyimpan sampel masukan baru int16t firStoreNewSamples (int16t inp, int length) meletakkan sampel baru di tinggi Akhir buffer memcpy (ampinsampMAXFLTLEN 8211 1, inp, ukuran panjangof (int16t)) mengembalikan lokasi untuk menerapkan pengembalian filter ampinsampMAXFLTLEN 8211 1 memindahkan sampel yang diproses void firMoveProcSamples (int length) mengubah sampel masukan kembali pada waktunya untuk memhove waktu berikutnya. (Ampinsamp0, ampinsamplength, (MAXFLTLEN 8211 1) sizeof (int16t)) fungsi filter FIR void firFixed (int16t coeffs, int16t input, i Akumulator int32t untuk pengikat koefisien MAC int16t ke koefisien int16t pointer inputp ke input sampel int n int k menerapkan filter ke setiap sampel masukan untuk (n 0 n lt length n) menghitung koefisien coeffp output n Inputp ampinputn load rounding constant acc 1 ltlt 14 melakukan multiply-accumulate for (k 0 k 0x3fffffff) acc 0x3fffffff else if (acc gt 15) Frekuensi cutoff lulus rendah 1000Hz, Frekuensi sampling 8915Hz. Define FILTERLEN 16 int16t coeffs FILTERLEN 0xFF45, 0xFE83, 0xFDB2, 0xFFC9, 0x088E, 0x18A4, 0x2B29, 0x37AF, 0x37AF, 0x2B29, 0x18A4, 0x088E, 0xFFC9, 0xFDB2, 0xFE83, 0xFF45 PORTA 0x00 DDRA 0x00 PORTB 0x00 DDRB 0xff PORTC 0x00 DDRC 0xff PORTD 0x00 DDRD 0x20 PIND.5 Filter Output void InitADC (void) ADMUX ADCVREFTYPE amp 0xff Pilih saluran 0 ADCSRA 0xC4 Aktifkan ADC amp start 1: st dummy conversion int16t ReadADC (unsigned char channel) int16t ADCValue ADMUX channel (ADCVREFTYPE amp 0xff) Pilih channel delayus (10) Keterlambatan yang dibutuhkan untuk stabilisasi voltase masukan ADC ADCSRA 0x40 Mulai konversi sementara ((ADCSRA amp 0x10)) Periksa apakah konversi siap ADCSRA 0x10 bendera siap konversi jelas dengan menetapkan sedikit ADCValue ADCL Baca 8 bit rendah pertama (penting) ADCValue (int) ADCH ltlt 8 Baca 2 bit tinggi dan kalikan dengan 256 void timer1 (void) TimerCounter 1 inisialisasi Sumber jam: Jam Sistem Jam nilai: 8000.000 kHz Mode: Modus Lebar Pulsa 8 bit Output OC1A: Non-Inv. Keluaran OC1B: Discon. Frekuensi output PWM dua kali lipat Kebisingan Canceler: Off91,09 Masukan Capture pada Falling Edge TCCR1A 0x91 TCCR1B 0x09 TCNT1H 0x00 TCNT1L 0x00 ICR1H 0x00 ICR1L 0x00 OCR1AH ​​0x00 OCR1AL 0x00 OCR1BH 0x00 OCR1BL 0x00 Inisialisasi semua perangkat cli () Hapus semua Interrupts InitPort () InitADC () Timer1 () int ukuran int16t inputSAMPLES int16t outputSAMPLES int16t inp menginisialisasi filter firFixedInit () memproses semua sampel membaca sampel dari ukuran file fread (input, sizeof (int16t), SAMPEL, infid) inputSAMPLES ReadADC (0x00) store new Contoh dalam array kerja inp firStoreNewSamples (ampinputSAMPLES, size) menerapkan setiap filter firFixed (coeffs, inp, output, size, FILTERLEN) memindahkan sampel yang diproses firMoveProcSamples (ukuran) while (size 0) Inisiasi Interrupt Eksternal INT0: Off INT1: Off MCUCR 0x00 MCUCSR 0x00 Timer (s) Interrupt (s) inisialisasi TIMSK 0x83 Analog komparator inisialisasi Analog komparator: Analog komparator input Masukan oleh TimerCounter 1: Off ACSR 0x80 SFIOR 0x00 sei () Aktifkan output keluaran PWM1DCReg interupsi Global untuk filter port output PORTB Toggle untuk memungkinkan pengukuran ISR Sampling Rate PORTC ADCH Periksa hasil Status ADCH Ada beberapa hal yang salah dengan kode Anda. Tampaknya Anda hanya membaca satu sampel sekaligus, jadi masuk akal untuk mengubah SAMPEL define menjadi 1 (atau hanya menggunakan variabel dan bukan array). The 8220size8221 pada awalnya jumlah sampel dibaca dari file dalam contoh saya. Anda hanya harus lulus 1, bukan jika Anda melakukan 1 sampel pada satu waktu. Loop yang harus dieliminasi sepenuhnya karena Anda tidak lagi membaca dari sebuah file. Anda harus menjadi pemungutan suara yang mengganggu atau menulis ISR sehingga Anda dapat membaca dari ADC secara berkala (8000 atau 8915 kali per detik, dilihat dari komentar dalam kode Anda). Dan Anda mungkin perlu menulis ke daftar output Anda setiap kali Anda memiliki output baru. Saya juga merekomendasikan memulai dengan program sederhana di mana Anda hanya membaca ADC dan kemudian output apa yang Anda baca. Setelah Anda memiliki yang bekerja, masukkan kode filter. Saya harap itu membantu. Dear Shawn, terimakasih atas saran dan saranmu. Saya baru untuk pemrograman controller saya harus mulai contoh yang sangat sederhana pertama. Saya sangat tertarik untuk belajar pemrograman controller jika mungkin tolong beri tahu saya bagaimana seharusnya saya memulai. Saya telah memulai pengetahuan tentang arsitektur AVR seri ATmega 8-bit microcontrollers. Dan saya menggunakan AVR Studio untuk pemrograman controller. Tolong bimbing saya bagaimana saya harus mulai mengerjakan pengontrol. Abdul. Saran saya adalah memulai dengan beberapa contoh program yang menyertai kit pengembangan Anda (atau peralatan, atau di tempat lain) dan pastikan Anda bisa memperbaikinya dengan benar. Kemudian cobalah bereksperimen dengan memodifikasi program ini. Setelah Anda bosan dengan itu, cobalah membuat program sendiri. Mulailah dengan sesuatu yang sederhana seperti menyiapkan ADC dan membaca darinya. Kemudian tambahkan lebih banyak fungsi satu langkah setiap kalinya. Tambahkan beberapa kode untuk mengatur timer dan pastikan berhasil. Tambahkan kode untuk membuat polling timer interrupt. Kemudian coba koding rutin layanan interupsi (ISR). Kemudian tambahkan kode ke ISR untuk membaca ADC. Caranya adalah dengan menulis sejumlah kecil kode sekaligus dan memverifikasi bahwa ia bekerja setiap langkahnya. Itu biasanya lebih mudah daripada menulis sejumlah besar kode sekaligus, dan kemudian mencoba men-debug semuanya sekaligus (terutama jika Anda melakukan sesuatu yang baru bagi Anda). Dear Shawn, terima kasih banyak atas saranmu. Dan saya berharap bantuan Anda jika saya menemukan masalah dalam pemrograman di masa depan. Terima kasih lagi. Shawn, saya mencoba untuk membuat equalizer grafis menggunakan filter FIR dan ini sudah cukup membantu sejauh ini. Tapi saya bertanya-tanya apakah Anda memiliki informasi tentang bagaimana menerapkan keuntungan pada output setiap band Hi Joseph. Untuk equalizer grafis, Anda ingin menerapkan gain ke setiap band dengan mengalikan hasil akhir dari penyaringan dengan angka antara 0 dan 1. Jadi setiap filter harus memiliki gain maksimal 1 (pada frekuensi tengah) dan kemudian Anda harus Memiliki satu set keuntungan untuk setiap band. Cara terbaik adalah mengekspresikan keuntungan di dB (deciBels) jika membuat tampilan grafis atau kontrol (seperti slider). Gain di dB adalah 20log10 (g) dimana g adalah nilai perkalian (antara tepat di atas 0 dan 1). Kemudian -6 dB sesuai dengan gain sekitar 0,5. Itu adalah 20log10 (0.5) kira-kira -6. Rumus sebaliknya adalah g pow10 (G20) di mana G adalah gain di dB. Jadi jika gainnya -24 dB, nilai pengali adalah g pow10 (-2420) 0,063. Alasan penggunaan desibel adalah karena persepsi kenyaringan mengikuti skala logaritmik. Semoga ini bisa membantu kamu Hi Shawn, Tutorial bagus Blog Anda memiliki banyak hal praktis daripada kebanyakan buku pengolah sinyal. Saya memiliki beberapa pertanyaan lanjutan di tutorial Anda dan akan lebih bagus lagi jika Anda bisa mengarahkan saya ke arah yang benar. Saya mencoba menerapkan (dalam hardwareverilog) mac 32 bit dengan input 2 16 bit. Jika saya ingin menyimpan kembali hasil 32 bit dalam register 16 bit, saya mengerti bahwa untuk perkalian tanda tangan yang ditandatangani dengan ditandatangani, kita hanya perlu (tanpa pembulatan) mengekstrak bit 30 sampai 15 (dan bukan 31 tanda ganda). 1) Agak bingung jika saya membutuhkan hardware yang berbeda untuk multiplier pecahan yang ditandatangani dan bilangan bulat integer murni. Katakanlah saya menggunakan dua register 16 bit terpisah untuk menyimpan hasil 32bit dari perkalian tersebut. Apakah Anda pikir hanya menggunakan shifter bersyarat antara hasil pengganda 32bit (segera setelah perangkat keras multplier) dan sebelum menyimpannya ke dalam 2 register terpisah akan cukup pergeseran shifter bersyarat yang ditinggalkan oleh 1 untuk pecahan berganda dan bergeser sebesar 0 untuk bilangan bulat multiply Terima kasih Untuk komentar Pertanyaan kedua Anda tampaknya telah hilang. Untuk menjawab pertanyaan pertama Anda, Anda harus bisa menggunakan pengganda yang sama untuk bilangan bulat dan perkalian titik tetap, seperti yang telah Anda jelaskan. Untuk pengali titik tetap, ada satu kasus khusus yang perlu Anda sadari, yang mengalikan -1 oleh -1 (di mana -1 adalah 0x8000 dalam pecahan Q.15). Bila Anda mengalikan 0x8000 dengan 0x8000, hasilnya akan menjadi 0x4000,0000. Jika Anda menggeser yang tersisa Anda berakhir dengan 0x8000,0000, jadi hasil akhirnya adalah bahwa -1 kali -1 sama dengan -1. Beberapa cara untuk menangani hal ini adalah: 1) Jangan mengalikan -1 by -1 2) Saturate hasilnya ke 0x7FFF, FFFF 3) Angkat bendera overflow dan atasi kesalahannya. Saya harap bantuan itu. Filter Umum Nama Umum: Penyaringan rata-rata, Smoothing, Averaging, Box filtering Deskripsi Singkat Penyaringan rata-rata adalah metode gambar smoothing yang sederhana, intuitif dan mudah diterapkan, yaitu mengurangi jumlah variasi intensitas antara satu piksel dan piksel berikutnya. . Hal ini sering digunakan untuk mengurangi noise pada gambar. Cara Kerjanya Gagasan penyaringan rata-rata hanya untuk mengganti setiap nilai piksel pada gambar dengan nilai rata-rata (rata-rata) tetangganya, termasuk dirinya sendiri. Ini memiliki efek menghilangkan nilai piksel yang tidak representatif dari lingkungannya. Penyaringan rata-rata biasanya dianggap sebagai filter konvolusi. Seperti konvolusi lainnya, ini berbasis di sekitar kernel. Yang mewakili bentuk dan ukuran lingkungan untuk dijadikan sampel saat menghitung mean. Seringkali sebuah kernel 32153 persegi digunakan, seperti yang ditunjukkan pada Gambar 1, meskipun kernel yang lebih besar (misalnya 52155 kotak) dapat digunakan untuk perataan yang lebih parah. (Perhatikan bahwa sebuah kernel kecil dapat diaplikasikan lebih dari satu kali untuk menghasilkan efek serupa namun tidak identik sebagai single pass dengan kernel besar.) Gambar 1 32153 kernel rata-rata yang sering digunakan dalam penyaringan rata-rata Menghitung lilitan langsung gambar dengan Kernel ini menjalankan proses penyaringan rata-rata. Panduan Penggunaan Rata-rata penyaringan paling umum digunakan sebagai metode sederhana untuk mengurangi kebisingan pada gambar. Kami mengilustrasikan filter yang menggunakan menunjukkan yang asli yang rusak oleh noise Gaussian dengan rata-rata nol dan deviasi standar () dari 8. menunjukkan efek penerapan filter rata-rata 32153. Perhatikan bahwa suaranya kurang jelas, namun gambarnya sudah melunak. Jika kita meningkatkan ukuran filter rata-rata menjadi 52155, kita mendapatkan gambar dengan sedikit noise dan detail frekuensi yang kurang tinggi, seperti yang ditunjukkan pada gambar yang sama lebih rusak oleh noise Gaussian (dengan mean nol dan 13) ditunjukkan. In adalah hasil dari mean filtering dengan kernel 32153. Tugas yang lebih menantang lagi adalah dengan menunjukkan efek merapikan citra berisik dengan filter rata-rata 32153. Karena nilai pixel noise shot seringkali sangat berbeda dari nilai disekitarnya, mereka cenderung secara signifikan mendistorsi rata-rata pixel yang dihitung dengan mean filter. Menggunakan filter 52155 sebagai gantinya, memberikan hasil ini bukan peningkatan yang signifikan dalam pengurangan kebisingan dan, selanjutnya, gambarnya sekarang sangat kabur. Contoh-contoh ini menggambarkan dua masalah utama dengan mean filtering, yaitu: Satu piksel dengan nilai yang sangat tidak representatif dapat secara signifikan mempengaruhi nilai rata-rata semua piksel di lingkungannya. Bila lingkungan filter mengangkangi tepi, filter akan menginterpolasi nilai baru untuk piksel di tepi dan dengan demikian akan mengaburkan tepi itu. Ini mungkin menjadi masalah jika tepi tajam diperlukan pada output. Kedua masalah ini ditangani oleh median filter. Yang sering merupakan penyaring yang lebih baik untuk mengurangi kebisingan daripada filter rata-rata, namun butuh waktu lebih lama untuk dihitung. Secara umum filter rata-rata bertindak sebagai filter frekuensi lowpass dan oleh karena itu mengurangi turunan intensitas spasial yang ada pada gambar. Kita telah melihat efek ini sebagai pelunakan fitur wajah pada contoh di atas. Sekarang perhatikan gambar yang menggambarkan sebuah adegan yang memiliki rentang frekuensi spasial yang lebih luas. Setelah merapikan sekali dengan filter rata-rata 32153 yang kami dapatkan Perhatikan bahwa informasi frekuensi spasial yang rendah di latar belakang tidak terpengaruh secara signifikan dengan penyaringan, namun tepi subjek latar depan (sekali renyah) telah diratakan dengan baik. Setelah menyaring dengan filter 72157, kita mendapatkan ilustrasi yang lebih dramatis dari fenomena ini. Bandingkan hasil ini dengan yang diperoleh dengan melewatkan filter 32153 di atas gambar asli tiga kali pada variasi varian umum pada filter penghalus rata-rata yang dibahas di sini termasuk Threshold Averaging dimana Smoothing diterapkan dengan syarat bahwa nilai pixel tengah berubah hanya jika selisih antara nilai awalnya dan nilai rata-rata lebih besar dari ambang batas yang telah ditetapkan. Ini memiliki efek bahwa noise diratakan dengan kehilangan detail citra yang kurang dramatis. Filter konvolusi lain yang tidak menghitung rata-rata lingkungan juga sering digunakan untuk menghaluskan. Salah satu yang paling umum adalah filter perataan Gaussian. Percobaan Interaktif Anda dapat melakukan eksperimen interaktif dengan operator ini dengan mengklik di sini. Filter rata-rata dihitung dengan menggunakan konvolusi. Dapatkah Anda memikirkan cara-cara di mana sifat khusus dari kernel filter rata-rata dapat digunakan untuk mempercepat konvolusi Apa kompleksitas komputasinya dari konvolusi yang lebih cepat Gunakan detektor tepi pada gambar dan perhatikan kekuatan outputnya. Kemudian gunakan filter rata-rata 32153 ke gambar asli dan jalankan detektor tepi lagi. Komentar pada perbedaan. Apa yang terjadi jika filter 52155 atau 72157 digunakan Menerapkan filter rata-rata 32153 dua kali tidak menghasilkan hasil yang sama seperti menerapkan filter rata-rata 52155 satu kali. Namun, kernel konvolusi 52155 dapat dibangun yang setara. Apa yang terlihat dari kernel ini Buat kernel konvolusi 72157 yang memiliki efek setara dengan tiga lolos dengan filter rata-rata 32153. Menurut Anda bagaimana filter rata-rata akan mengatasi kebisingan Gaussian yang tidak simetris sekitar nol Cobalah beberapa contoh. Referensi R. Boyle dan R. Thomas Computer Vision: Kursus Pertama. Publikasi Ilmiah Blackwell, 1988, hlm. 32 - 34. E. Davies Machine Vision: Teori, Algoritma dan Praktikum. Academic Press, 1990, Chap. 3. D. Vernon Machine Vision. Prentice-Hall, 1991, Chap. 4. Informasi Lokal Informasi spesifik tentang operator ini dapat ditemukan di sini. Saran umum tentang pemasangan HIPR lokal tersedia di bagian Pengantar Informasi Lokal.

No comments:

Post a Comment