图像处理系列IP内核提供了四种IP核:RGB转灰度,RGB转HSV,HSV转RGB,以及边缘检测。
RGB转灰度模块使用转换公式Gray = x·R + y·G + z·B进行转换。
传统的转换方法精度较低。在此,使用二进制移位方法代替十进制数以减少精度损失。模块提供总共20种灰度分辨率,共1-20位。
module RGB_To_Gray(
input [7:0]RGB_Data_R,
input [7:0]RGB_Data_G,
input [7:0]RGB_Data_B,
input [4:0]Accuracy_Num,
output [7:0]Gray_Data
);
信号类型 | 信号名称 | 描述 |
---|---|---|
input | RGB_Data_R | 需要被转换的R通道数据 |
input | RGB_Data_G | 需要被转换的G通道数据 |
input | RGB_Data_B | 需要被转换的B通道数据 |
input | Accuracy_Num | 数据精度:1-20种精度,其他部分按照20位精度计算 |
output | Gray_Data | 转换后的灰度数据输出 |
RGB到HSV模块使用RGB到HSV的转换公式进行转换。
由于一般的转换方法会将HSV数据的三个通道归一化为0-1,因此FPGA上的计算将导致精度损失。
这里,我们没有进行归一化,而是保持了原始值。
module RGB_To_HSV(
input clk_Image_Process,
input Rst,
input [7:0]RGB_Data_R,
input [7:0]RGB_Data_G,
input [7:0]RGB_Data_B,
output reg[8:0]HSV_H,
output reg[7:0]HSV_S,
output reg[7:0]HSV_V,
output [2:0]Delay_Num
);
信号类型 | 信号名称 | 描述 |
---|---|---|
input | clk_Image_Process | 时钟信号 |
input | Rst | 复位信号,低电平有效 |
input | RGB_Data_R | 需要被转换的R通道数据 |
input | RGB_Data_G | 需要被转换的G通道数据 |
input | RGB_Data_B | 需要被转换的B通道数据 |
output | HSV_H | 转换后的H通道数据输出 |
output | HSV_S | 转换后的S通道数据输出 |
output | HSV_V | 转换后的V通道数据输出 |
output | Delay_Num | 由于转换过程中用到除法,那么需要给输出进行延时,这里输出的是延时数目 |
HSV转RGB模块使用HSV到RGB的转换公式进行转换。
转换公式,如下图所示:
module HSV_To_RGB(
input clk_Image_Process,
input Rst,
input [8:0]HSV_Data_H,
input [7:0]HSV_Data_S,
input [7:0]HSV_Data_V,
output [7:0]RGB_Data_R,
output [7:0]RGB_Data_G,
output [7:0]RGB_Data_B,
output [2:0]Delay_Num
);
信号类型 | 信号名称 | 描述 |
---|---|---|
input | clk_Image_Process | 时钟信号 |
input | Rst | 复位信号,低电平有效 |
input | HSV_Data_H | 需要被转换的H通道数据 |
input | HSV_Data_S | 需要被转换的S通道数据 |
input | HSV_Data_V | 需要被转换的V通道数据 |
output | RGB_Data_R | 转换后的R通道数据输出 |
output | RGB_Data_G | 转换后的G通道数据输出 |
output | RGB_Data_B | 转换后的B通道数据输出 |
output | Delay_Num | 由于转换过程中用到除法,那么需要给输出进行延时,这里输出的是延时数目 |
边缘检测模块使用Sobel算子对灰度图像进行边缘检测。
Sobel算子的计算公式如下:
其中f(a,b)代表图像(a,b)点的灰度值。 然后从Gx和Gy中找到▽f。 如果▽f大于某个阈值,则将点(x,y)视为边缘点。
module Edge_Check(
input clk_Image_Process,
input Rst,
input RGB_DE,
input [7:0]Gray_Data,
input [7:0]Gray_Gate,
output [2:0]Delay_Num,
output [23:0]RGB_Data
);
信号类型 | 信号名称 | 描述 |
---|---|---|
input | clk_Image_Process | 时钟信号 |
input | Rst | 复位信号,低电平有效 |
input | RGB_DE | 图像数据有效信号,高电平有效 |
input | Gray_Data | 灰度数据 |
input | Gray_Gate | 灰度阈值 |
output | Delay_Num | 由于转换过程中用到除法,那么需要给输出进行延时,这里输出的是延时数目 |
output | RGB_Data | 边缘检测后输出的二值化RGB数据 |
图像处理系列IP核的相关使用案例,可以在Examples中找到,例如Image_Demo。