FPGAスタディnotes_image処理4_FPGAグレースケール画像平均フィルタリングアルゴリズムの実装

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の実装手順

    1. フォーム3 * 3マトリックスピクセル
    2. 周囲の近傍の8点のピクセルの合計を求めます。
    3. 結果を右に3桁シフトし(8で割るのと同じ)、結果を取得します。
  • FPGAの実装方法
    方法(2種類):1。R/ G / Bチャネルを介してモノクロチャネルを形成し、平均フィルターを入力して、グレースケール画像の平均フィルターを実現します。2.RGB画像をYcbcr画像に変換します。 Yチャネルは平均フィルターに入り、グレー画像の平均フィルタリングを実現します。

    1. R / G / Bチャンネルを介してモノクロチャンネルを平均フィルターに形成し、グレー画像の平均フィルターを実現
      ここに画像の説明を挿入

    2. 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システム設計・検証実践ガイド」
【注】:個人学習ノート、間違いがありましたら、お気軽に教えてください、丁寧です~~~


おすすめ

転載: blog.csdn.net/weixin_50722839/article/details/113841106