FPGAスタディノート
画像処理アルゴリズム
1. 灰度图像均值滤波算法
1.1 原理
1.2 FPGA实现灰度图像均值滤波算法
1.グレースケール画像平均フィルタリングアルゴリズム
1.1原則
-
平均フィルタリング:線形フィルタリング、近隣平均法。
-
原理:平均値を使用して、元の画像の各ピクセル値を置き換えます。つまり、ターゲットピクセル(x、y)を中心とするNピクセルf(x、y)を見つけ、これらのNピクセルの平均値を使用して、元のターゲットピクセルをポイントg(x、y)として置き換えます。処理された画像)=(1 / N)(∑f(xi、yi))。
-
短所:画像の細部をうまく保護できず、画像がぼやけてしまい、ノイズポイントをうまく除去できません。
1.2グレースケール画像平均フィルタリングアルゴリズムのFPGA実装
-
プロジェクトの目標:
グレースケール処理、平均フィルタリングアルゴリズムによるカラー画像のノイズ除去処理、およびFPGAを介したTFTディスプレイへの表示。 -
FPGAの実装手順:
- フォーム3 * 3マトリックスピクセル
- 周囲の近傍の8点のピクセルの合計を求めます。
- 結果を右に3桁シフトし(8で割るのと同じ)、結果を取得します。
-
FPGAの実装方法:
方法(2種類):1。R/ G / Bチャネルを介してモノクロチャネルを形成し、平均フィルターを入力して、グレースケール画像の平均フィルターを実現します。2.RGB画像をYcbcr画像に変換します。 Yチャネルは平均フィルターに入り、グレー画像の平均フィルタリングを実現します。-
R / G / Bチャンネルを介してモノクロチャンネルを平均フィルターに形成し、グレー画像の平均フィルターを実現
-
RGB画像をYcbcr画像に変換し、Yチャンネルが平均フィルターに入り、グレー画像の平均フィルターを実現します
-
-
プロジェクトコンポーネントモジュール:
①PLL:プロジェクトに必要なクロック生成1. SDRAMコントローラのクロックと、前記SDRAMクロック信号; 3. TFTスクリーンコントローラクロック
②UARTシリアルポートプロトコル(UART_RX、UART_TX)
③FIFO読み取り
④書き込みFIFOを
⑤ SDRAMコントロールモジュール
⑥TFTスクリーンコントロールモジュール
法律グレー処理、平均フィルターモジュール -
Verilogコード
/*
- 形成3*3矩阵像素
- 求周围邻域8个点的像素之和
- 将结果右移3位(相当于除8),得到结果。
*/
module mean_filter_r0(
input clk,
input rst_n,
input [15:0] data_in,//输入像素
input data_in_en,//lcd显示区使能信号
output reg [15:0] data_out,//输出像素
output wire data_out_en
);
wire [15:0] r0;
wire [15:0] r1;
wire [15:0] r2;
reg [15:0] ro_c0;
reg [15:0] ro_c1;
reg [15:0] ro_c2;
reg [15:0] r1_c0;
reg [15:0] r1_c1;
reg [15:0] r1_c2;
reg [15:0] r2_c0;
reg [15:0] r2_c1;
reg [15:0] r2_c2;
reg de_reg0;
reg de_reg1;
reg de_reg2;
wire [18:0] add_out;
//----3line pixels-----------------------------------
shifter3_3 shifter3_3(
.clken(data_in_en),
.clock(clk),
.shiftin(data_in),
.shiftout(),
.taps0x(r0),
.taps1x(r1),
.taps2x(r2)
);
//-------------------------------------------------
//----3*3 matrix pixels from image-----------------
//----r0-------------------------------------------
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
ro_c0 <= 16'd0;
ro_c1 <= 16'd0;
ro_c2 <= 16'd0;
end
else if(data_in_en)begin
ro_c0 <= r0;
ro_c1 <= ro_c0;
ro_c2 <= ro_c1;
end
end
//----r1-------------------------------------------
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
r1_c0 <= 16'd0;
r1_c1 <= 16'd0;
r1_c2 <= 16'd0;
end
else if(data_in_en)begin
r1_c0 <= r1;
r1_c1 <= r1_c0;
r1_c2 <= r1_c1;
end
end
//----r2-------------------------------------------
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
r2_c0 <= 16'd0;
r2_c1 <= 16'd0;
r2_c2 <= 16'd0;
end
else if(data_in_en)begin
r2_c0 <= r2;
r2_c1 <= r2_c0;
r2_c2 <= r2_c1;
end
end
//-------------------------------------------------
//----timing --------------------------------------
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
de_reg0 <= 1'd0;
de_reg1 <= 1'd0;
de_reg2 <= 1'd0;
end
else if(data_in_en)begin
de_reg0 <= data_in_en;
de_reg1 <= de_reg0;
de_reg2 <= de_reg1;
end
end
assign data_out_en = de_reg2;
//-------------------------------------------------
//----add------------------------------------------
add_paral add_paral(
.clken(data_in_en),
.clock(clk),
.data0x(r0),
.data1x(ro_c0),
.data2x(ro_c1),
.data3x(r1),
.data4x(r1_c1),
.data5x(r2),
.data6x(r2_c0),
.data7x(r2_c1),
.result(add_out)
);
//-------------------------------------------------
//----divide 8-------------------------------------
always@(posedge clk or negedge rst_n)begin
if(!rst_n)
data_out <= 16'd0;
else if(data_in_en)
data_out <= add_out[18:3];
else;
end
endmodule
- プロジェクト結果
5インチTFT静電容量式タッチスクリーン
画像:800 * 480ピクセル
(1)。(Yiyanqianxi ^^)元のネットワーク画像:
(2)。FPGAディスプレイの元の画像:(3)。FPGA
グレースケール処理画像:
(4)FPGA平均フィルター図:
プロジェクト結果分析:
- 元の画像やグレースケール処理された画像と比較すると、平均フィルタリング後の画像は明らかにぼやけており、平均フィルタリングでは画像のノイズ除去時に画像の詳細を十分に保護できないことが確認されています。
参考資料:「FPGAシステム設計・検証実践ガイド」
【注】:個人学習ノート、間違いがありましたら、お気軽に教えてください、丁寧です~~~