本文转载自:FPGA入门到精通
图像反转技术在计算机视觉和图像处理中有着广泛的应用,主要包括图像灰度反转和彩色反转两大类。
本文将详细介绍图像灰度反转与彩色反转的基本概念以及FPGA实现。
一、什么是图像反转
图像反转是指对图像的彩色、灰度进行相反的处理,从而得到一个新的图像。在计算机视觉和图像处理领域,图像反转是一种常见的操作,它可以帮助我们实现不同的图像特效和视觉效果。
1、灰度反转
这种方法是将图像的灰度进行相反的处理,即原灰度值变为255,原非灰度值变为0。这种反转可以通过对图像的灰度通道进行操作来实现。
灰度图像:R = G = B
灰度图像反转:R = G = B = 255 - R;
2、彩色反转
这种方法是将图像中的彩色进行相反的处理,例如将红色变为青色,绿色变为品红色,蓝色变为黄色,反之亦然。这种反转可以通过遍历图像中的每个像素,并根据颜色通道值进行相应的转换来实现。
简单点理解就是:R = 255 - R;G = 255 - G; B = 255 - B;
例如:红色(R=255,G=0,B=0)变为青色(R=0,G=255,B=255)
总的来说,不管是彩色还是灰度图像,都可以按这个公式:R = 255 - R;G = 255 - G; B = 255 - B;
二、FPGA实现
1、灰度反转
关键代码逻辑如下:
always@(posedge clk or posedge reset) begin
if(reset) begin
RGB_new <= 'b0;
end else begin
RGB_new <= 'd255 - RGB_avr_m[16:9];
end
end
assign img_data_o = {3{RGB_new}};
效果图:
2、彩色反转
always@(posedge clk or posedge reset) begin
if(reset) begin
valid_o <= 'b0;
img_data_o <= 'b0;
end else begin
valid_o <= valid_i;
img_data_o[23:16] <= 255 - img_data_i[23:16];
img_data_o[15:8] <= 255 - img_data_i[15:8];
img_data_o[7:0] <= 255 - img_data_i[7:0];
end
end
效果图: