ChinaAET "Elektronik Uygulama Teknolojisi" referans almaya değer bir makale yayınladı "FPGA'ya Dayalı Gerçek Zamanlı Medyan Filtrenin Donanım Uygulaması" Bu makale, gerçek zamanlı medyanı gerçekleştirmek için FPGA + SRAM kullanır Shift_RAM yeterlidir). Tamam, konuyu değiştirin. Şu anki odak noktamız 9 değerin ortalamasını nasıl hızlı bir şekilde bulacağımızdır. Bu makale, aşağıdaki şekilde gösterildiği gibi bir tür hızlı sıralama yöntemi sunar:
Şekilden de görülebileceği gibi, önce her satırdaki 3 pikseli sıralayın ve ardından üç maksimumun minimumunu, minimumların maksimumunu ve medyanın medyanını çıkarın; son olarak, elde edilen üç Değerde, nihai sonucu elde etmek için ara değeri çıkarın. Tüm hesaplama 3 clk tüketir ve bunu gerçekleştirmek için kabarcık yöntemine ihtiyaç duymaz, bu da zamandan tasarruf sağlar.
Ön taraftaki VIP_Matrix_Generate_3X3_8Bit modülünün tasarımı sayesinde, çok çaba sarf ettikten sonra nihayet hayallerimizdeki 3 * 3 piksel dizisini elde ettik, her piksel 8Bit derinliğinde. Bu aşamada ortalama filtreleme algoritmasını tasarlamaya ve uygulamaya başlayın.
(1) İlk olarak, her satırdaki 3 pikseli ayrı ayrı sıralayın.Verilog HDL uygulamasında paralel özellik nedeniyle sadece bir saate ihtiyacımız var. Uygulama aşağıdaki gibidir:
modül Sort3
(
giriş clk,
girdi rst_n,
giriş verisi1, veri2, veri3,
çıktı reg max_data, mid_data, min_data
);
// -----------------------------------
// 3 veriyi sırala
her zaman @ (posedge clk veya negedge rst_n)
başla
eğer (! rst_n)
başla
max_data < = 0;
veri ortası < = 0;
min_data < = 0;
son
Başka
başla
// maksimum değeri al
eğer (veri1 > = veri2 veri1 > = veri3)
max_data < = veri1;
else if (veri2 > = veri1 veri2 > = veri3)
max_data < = veri2;
else // (veri3 > = veri1 veri3 > = veri2)
max_data < = veri3;
// orta değeri al
eğer ((veri1 > = veri2 veri1 < = veri3) || (veri1 > = veri3 veri1 < = veri2))
veri ortası < = veri1;
else if ((veri2 > = veri1 veri2 < = veri3) || (veri2 > = veri3 veri2 < = veri1))
veri ortası < = veri2;
else // ((veri3 > = veri1 veri3 < = veri2) || (veri3 > = veri2 veri3 < = veri1))
veri ortası < = veri3;
// minimum değeri belirle
eğer (veri1 < = veri2 veri1 < = veri3)
min_data < = veri1;
else if (veri2 < = veri1 veri2 < = veri3)
min_data < = veri2;
else // (veri3 < = veri1 veri3 < = veri2)
min_data < = veri3;
son
son
Yukarıdaki devre, hesaplamanın ilk adımını uygular, yeni bir Median_Filter_3X3.v oluşturur ve aşağıdaki gibi Sort3'ü başlatır:
//Aşama 1
tel max_data1, mid_data1, min_data1;
Sırala3 u_Sort3_1
(
.clk (clk),
.rst_n (rst_n),
.data1 (veri11),
.data2 (veri12),
.data3 (veri13),
.max_data (max_data1),
.mid_data (mid_data1),
.min_data (min_data1)
);
(2) Daha sonra, üç piksel sırasının sıralaması işlenir, yani, üç maksimumun minimum, üç minimumun maksimum ve üç ara değerin orta değeri çıkarılır. Burada, aşağıda gösterildiği gibi Sort3 modülünü doğrudan başlatabilirsiniz:
//Adım 2
wire max_min_data, mid_mid_data, min_max_data;
Sırala3 u_Sort3_4
(
.clk (clk),
.rst_n (rst_n),
.data1 (max_data1),
.data2 (max_data2),
.data3 (max_data3),
.max_data,
.mid_data,
.min_data (max_min_data)
);
Sırala3 u_Sort3_5
(
.clk (clk),
.rst_n (rst_n),
.data1 (mid_data1),
.data2 (mid_data2),
.data3 (mid_data3),
.max_data,
.mid_data (mid_mid_data),
.min_data
);
Sırala3 u_Sort3_6
(
.clk (clk),
.rst_n (rst_n),
.data1 (min_data1),
.data2 (min_data2),
.data3 (min_data3),
.max_data (min_max_data),
.mid_data,
.min_data
);
(3) Son olarak, aşağıdaki gibi son 9 pikselin medyanını bulmak için (2) 'de elde edilen üç değerin medyanını tekrar alın:
//Aşama 3
Sırala3 u_Sort3_7
(
.clk (clk),
.rst_n (rst_n),
.data1 (max_min_data),
.data2 (mid_mid_data),
.data3 (min_max_data),
.max_data,
.mid_data (target_data),
.min_data
);
Tamam, (1) - (3) 'ten itibaren, 3 * 3 piksel dizisinin medyan çıkarımını tamamlamak için 3 saat harcadık. Bu üç adımın RTL diyagramı aşağıdaki gibidir: 9 piksel girin, hedef medyan pikseli çıkarın:
Son olarak, VIP_Gray_Median_Filter.v'deki medyan ayıklama şu şekilde somutlaştırılır:
// 3X3 verilerin Medyan Filtresi, 3 saate ihtiyaç duyar
tel orta_değer;
Median_Filter_3X3 u_Median_Filter_3X3
(
.clk (clk),
.rst_n (rst_n),
// SATIR1
.data11 (matrix_p11),
.data12 (matrix_p12),
.data13 (matrix_p13),
// ROW2
.data21 (matrix_p21),
.data22 (matrix_p22),
.data23 (matrix_p23),
// ROW3
.data31 (matrix_p31),
.data32 (matrix_p32),
.data33 (matrix_p33),
.target_data (mid_value)
);
3 saat kullanıldığından, çizgi ve alan ve piksel etkinleştirmesinin de senkronizasyonu sürdürmek için 3 saati buna göre hareket ettirmesi gerekir.Bu, aşağıdaki gibi çok önemlidir:
// ------------------------------------------
// 3 saat sinyal senkronizasyonu
reg per_frame_vsync_r;
reg per_frame_href_r;
her zaman @ (posedge clk veya negedge rst_n)
başla
eğer (! rst_n)
başla
per_frame_vsync_r < = 0;
per_frame_href_r < = 0;
son
Başka
başla
per_frame_vsync_r < = {per_frame_vsync_r, matrix_frame_vsync};
per_frame_href_r < = {per_frame_href_r, matrix_frame_href};
son
son
atama post_frame_vsync = per_frame_vsync_r;
atamak post_frame_href = per_frame_href_r;
atama post_img_Gray = post_frame_href? mid_value: 8'd0;
Son olarak, aşağıdaki şekilde gösterildiği gibi, medyan filtrelemenin Modelsim simülasyon diyagramı verilmiştir (yeni mimaride * _clken yoktur):
Daha önce yapılan 3 * 3 temelinde, bir medyan filtresi uygulamak çok kolaydır, elbette, öncül bu tasarım içeriklerine hakim olmanızdır. VIP_Gray_Median_Filter'ı VIP_Image_Processor'da aşağıdaki gibi örnekleyin:
// --------------------------------------
// Daha iyi görüntü kalitesi için Gri Görüntü medyan filtresi.
wire post3_frame_vsync; // İşlenmiş Görüntü verileri vsync geçerli sinyal
wire post3_frame_href; // İşlenmiş Görüntü verileri href vaild sinyali
wire post3_img_Gray; // İşlenmiş Görüntü Gri çıktısı
VIP_Gray_Median_Filter
# (
.IMG_HDISP (IMG_HDISP), // 640 * 480
.IMG_VDISP (IMG_VDISP)
)
u_VIP_Gray_Median_Filter
(
// küresel saat
.clk (clk), // cmos video piksel saati
.rst_n (rst_n), // genel sıfırlama
// İşlenmek üzere hazırlanmış görüntü verileri
.per_frame_vsync (post2_frame_vsync), // Hazırlanan Görüntü verileri vsync geçerli sinyal
.per_frame_href (post2_frame_href), // Hazırlanan Görüntü verileri href vaild sinyali
.per_img_Gray (post2_img_Gray), // Hazırlanmış Görüntü parlaklığı girişi
// Görüntü verileri işlendi
.post_frame_vsync (post3_frame_vsync), // İşlenmiş Görüntü verileri vsync geçerli sinyal
.post_frame_href (post3_frame_href), // İşlenmiş Görüntü verileri href vaild sinyali
.post_img_Gray (post3_img_Gray) // İşlenmiş Görüntü parlaklığı çıktısı
);
başka
post3_frame_vsync = post2_frame_vsync atayın;
post3_frame_href = post2_frame_href atayın;
atama post3_img_Gray = post2_img_Gray;
Son olarak, jic dosyasını tam olarak derleyin, oluşturun ve indirin ve işlenmiş videoyu VGA veya PC ana bilgisayarında aşağıda gösterildiği gibi izleyin:
Yukarıdaki resmin solu orijinal gri tonlamalı görüntüdür ve yukarıdaki resmin sağ tarafı medyan filtrelemeden sonraki görüntüdür.Maksimum değer düşürüldüğü için medyan filtrelemeden sonra görüntünün nispeten daha koyu olduğu görülebilir. Ancak ortalama filtreleme ile karşılaştırıldığında, medyan filtreleme, gürültüyü filtreleyerek ayrıntıları etkili bir şekilde korur.
Ek olarak, bu arada, ortalama filtreleme ile medyan filtrelemenin etkisi arasındaki farktan bahsedelim, işte aşağıda gösterildiği gibi bir karşılaştırma:
Yukarıdaki şeklin sol görüntüsü, ortalama filtrelenmiş görüntüdür ve yukarıdaki görüntünün sağ görüntüsü, medyan filtrelenmiş görüntüdür. Şeklin analizinden, ortalama filtreden sonraki görüntünün bulanıklaştığı ve medyan filtre tarafından işlenen görüntüye kıyasla ayrıntıların kaybolduğu görülebilir. Tuz ve biber gürültüsünün işlenmesi için, medyan filtrelemenin avantajı, ortalama filtrelemeden daha büyüktür.
Daha önce de belirtildiği gibi, görüntü işlemede birçok filtreleme algoritması vardır, ancak bunlar birbirlerinden ayrılamazlar.En temel görüntü işleme ve transplantasyon ve uygulama sorunu olan daha şablon algoritma işleme yöntemlerinde ustalaşmışlardır. Bingo burada, okuyucuların kendi başlarına çalışıp uygulamalarını bekleyen en temel medyan filtre algoritmasının FPGA uygulamasını, daha tipik, hedeflenmiş ve daha NB filtre algoritmasını tanıtıyor!
VIP görüntü işleme dünyayı daha heyecanlı kılar!
Ciddiyetle beyan edin: Sadece bu bölümde% 100 ustalaştığınızda, Bingo VIP algoritması uygulamasının özünü anlayabilir ve aşağı bakmaya devam etme anlamını elde edebilirsiniz! ! !