图像处理:生成3×3的窗口

在这里插入图片描述

生成3×3的窗口

module Shift_RAM_3X3(
	//global signals
	input 					clk,						
	input 					rst_n,							
	//Image data prepred to be processd
	input					per_frame_vsync,	//Prepared Image data vsync valid signal
	input					per_frame_href,		//Prepared Image data href vaild  signal
	input					per_frame_clken,	//Prepared Image data output/capture enable clock
	input			[7:0]	per_img_Y,			//Prepared Image brightness input
	
	//Image data has been processd
	output					matrix_frame_vsync,	//Prepared Image data vsync valid signal
	output					matrix_frame_href,	//Prepared Image data href vaild  signal
	output					matrix_frame_clken,	//Prepared Image data output/capture enable clock	
		
	output 	reg 	[7:0]	matrix_p11,						
	output 	reg		[7:0]	matrix_p12,						
	output 	reg		[7:0]	matrix_p13,			//3X3 Matrix output
	output 	reg		[7:0]	matrix_p21,						
	output 	reg		[7:0]	matrix_p22,						
	output 	reg		[7:0]	matrix_p23,						
	output 	reg		[7:0]	matrix_p31,						
	output 	reg		[7:0]	matrix_p32,						
	output 	reg		[7:0]	matrix_p33					
    );
	
	//----------------------------------------------
	//consume 1clk
	wire 	[7:0] 	row1_data;//frame data of the 1th row
	wire 	[7:0]	row2_data;//frame data of the 2th row
	reg 	[7:0] 	row3_data;//frame data of the 3th row

// ====================================================================================================	
// 得到一个3×n的矩阵
// ====================================================================================================
	
// 将正在输入的Y值给data_3,data_3一直在最上面那一行
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)
			row3_data <= 8'b0;
		else begin
			if(per_frame_clken)
				row3_data <= per_img_Y;
			else
				row3_data <= row3_data;
			end
	end

	
	//Shift_RAM_3X3_8bit1
	//在这个IP和内部会先将输入的data_3存到RAM中,等存满一行后,就将data_3给data_2进行输出
	Shift_RAM_3X3_8bit u1_Shift_RAM_3X3_8bit (
		.D		(row3_data),					// 输入的灰度Y,即当前正在输入的那一行
		.CLK	(per_frame_clken & clk),		// input wire CLK
		.Q		(row2_data)						// output wire [7 : 0] Q
);

	//Shift_RAM_3X3_8bit2
	Shift_RAM_3X3_8bit u2_Shift_RAM_3X3_8bit (
		.D		(row2_data),					// input wire [7 : 0] D
		.CLK	(per_frame_clken & clk),		// input wire CLK
		.Q		(row1_data)						// output wire [7 : 0] Q
);
// ====================================================================================================、、
	

	//per_clken delay 3clk
	reg [4:0]per_frame_clken_r;
	reg [4:0]per_frame_vsync_r;
	reg [4:0]per_frame_href_r;

	
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)begin
			per_frame_clken_r <= 5'b0;
			per_frame_vsync_r <= 5'b0;
			per_frame_href_r  <= 5'b0;
		end
		else begin
			per_frame_clken_r <= {per_frame_clken_r[3:0], per_frame_clken};
			per_frame_vsync_r <= {per_frame_vsync_r[3:0], per_frame_vsync};
			per_frame_href_r  <= {per_frame_href_r [3:0], per_frame_href};
		end
	end
	
	
	assign 	matrix_frame_clken = per_frame_clken_r[4];
	assign 	matrix_frame_href  = per_frame_href_r [4];
	assign 	matrix_frame_vsync = per_frame_vsync_r[4];
	
	/****************************************
	(1)read data from shift_RAM
	(2)caulate the sobel
	(3)steady data after sobel generate
	******************************************/
	
	// 将那3行数据进行打拍	
	always @(posedge clk or negedge rst_n)begin
		if(!rst_n)begin
			{matrix_p11, matrix_p12, matrix_p13} <= 24'h0;
			{matrix_p21, matrix_p22, matrix_p23} <= 24'h0;
			{matrix_p31, matrix_p32, matrix_p33} <= 24'h0;
		end
		else if(per_frame_clken_r[3])begin												//shift_RAM data read clock enbale 
			{matrix_p11, matrix_p12, matrix_p13} <= {matrix_p12, matrix_p13, row1_data};//1th shift input
			{matrix_p21, matrix_p22, matrix_p23} <= {matrix_p22, matrix_p23, row2_data};//2th shift input 
			{matrix_p31, matrix_p32, matrix_p33} <= {matrix_p32, matrix_p33, row3_data};//3th shift input 
		end
		else begin
			{matrix_p11, matrix_p12, matrix_p13} <= {matrix_p11, matrix_p12, matrix_p13};
			{matrix_p21, matrix_p22, matrix_p23} <= {matrix_p21, matrix_p22, matrix_p23};
			{matrix_p31, matrix_p32, matrix_p33} <= {matrix_p31, matrix_p32, matrix_p33};
		end
	end
	
	
endmodule

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Halcon是一款功能强大的图像处理软件,可以用于处理3D视觉的Tiff图像。下面展示了处理3D Tiff图像的一般步骤。 1. 导入图像:首先,使用Halcon提供的图像导入功能将3D Tiff图像文件导入到Halcon中。可以使用read_tiff函数来读取Tiff图像文件,并将其加载为Halcon的图像对象。 2. 图像预处理:在进行3D视觉处理之前,可能需要对图像进行一些预处理,以提高后续的处理效果。例如,可以使用smooth_image函数对图像进行平滑处理,使用normalize函数对图像进行归一化,或者使用enhance_image函数增强图像的对比度。 3. 三维视觉处理:Halcon提供了一系列的三维视觉处理函数,可以对3D Tiff图像进行分割、测量、重建等操作。例如,可以使用threshold函数对图像进行分割,使用distance_transform函数计算图像中每个像素点到目标边界的距离,或者使用surface_reconstruction函数重建3D对象的表面。 4. 结果分析和可视化:在完成3D视觉处理后,可以根据实际需求对处理结果进行分析和可视化。可以使用region_features函数提取图像区域的特征,使用measure_distance函数测量两个点之间的距离,或者使用gen_3d_shape_model函数生成3D对象的模型。 5. 结果输出:最后,可以使用write_tiff函数将处理结果以Tiff图像的形式保存到硬盘中,或者使用disp_object函数在Halcon的图形窗口中显示结果。 总之,Halcon提供了丰富的功能和工具,可以用于处理3D Tiff图像。通过导入图像、预处理、三维视觉处理、结果分析和输出等步骤,可以实现对3D Tiff图像的全面处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值