我有一個黑白圖像,我想反轉(黑色到白色和白色到黑色),其中黑色= 0和白色= 255。我試圖使用下面的代碼,而不是反轉我的圖像,它只是使整個屏幕變黑。試圖反轉二進制圖像給我全黑屏
module Inverter (
input [7:0] binary_red,
input [7:0] binary_green,
input [7:0] binary_blue,
output [7:0] inverted_red,
output [7:0] inverted_green,
output [7:0] inverted_blue);
parameter black = 0;
parameter white = 255;
assign inverted_red = (binary_red == black) ? white : black;
assign inverted_green = (binary_green == black) ? white : black;
assign inverted_blue = (binary_blue == black) ? white : black;
endmodule
任何想法爲什麼這不像我想要的那樣顛倒?謝謝您的幫助!
編輯:所以有人要求看到更多的代碼,因爲它可能不是這個模塊,搞砸了。有一種彩色濾光器,它接受原始RGB數據並濾除僅紅色第一:
module Color_Filter (
input [9:0] oVGA_Red,
input [9:0] oVGA_Green,
input [9:0] oVGA_Blue,
output [7:0] filtered_Red,
output [7:0] filtered_Green,
output [7:0] filtered_Blue);
parameter redFilterValue = 150;
parameter greenFilterValue = 110;
parameter blueFilterValue = 110;
assign filtered_Red = (oVGA_Red[9:2] >= redFilterValue && oVGA_Green[9:2] <= greenFilterValue && oVGA_Blue[9:2] <= blueFilterValue) ? oVGA_Red[9:2] : 0;
assign filtered_Green = (oVGA_Red[9:2] >= redFilterValue && oVGA_Green[9:2] <= greenFilterValue && oVGA_Blue[9:2] <= blueFilterValue) ? oVGA_Green[9:2] : 0;
assign filtered_Blue = (oVGA_Red[9:2] >= redFilterValue && oVGA_Green[9:2] <= greenFilterValue && oVGA_Blue[9:2] <= blueFilterValue) ? oVGA_Blue[9:2] : 0;
endmodule
此它被轉換後用下面的代碼爲灰度:
module Greyscale_Filter (
input [7:0] filtered_red,
input [7:0] filtered_green,
input [7:0] filtered_blue,
output [7:0] greyscale_red,
output [7:0] greyscale_green,
output [7:0] greyscale_blue);
assign greyscale_red = (filtered_red != 0) ? (299*filtered_red/1000)+(587*filtered_green/1000)+(114*filtered_blue/1000) : 0;
assign greyscale_green = (filtered_green != 0) ? (299*filtered_red/1000)+(587*filtered_green/1000)+(114*filtered_blue/1000) : 0;
assign greyscale_blue = (filtered_blue != 0) ? (299*filtered_red/1000)+(587*filtered_green/1000)+(114*filtered_blue/1000) : 0;
endmodule
然後,它前進到它着眼於灰度值,並轉換爲基於其價值二值圖像,如下圖所示:
module Binary_Filter (
input [7:0] greyscale_red,
input [7:0] greyscale_green,
input [7:0] greyscale_blue,
output [7:0] binary_red,
output [7:0] binary_green,
output [7:0] binary_blue);
parameter black = 0;
parameter white = 255;
assign binary_red = ((greyscale_red > 51) ? white : black);
assign binary_green = ((greyscale_green > 51) ? white : black);
assign binary_blue = ((greyscale_blue > 51) ? white : black);
endmodule
在這之後它進入我最初發布的反轉模塊。在我的頂層模塊,這是通過做做:
Color_Filter color_filter (
.oVGA_Red(oVGA_R),
.oVGA_Green(oVGA_G),
.oVGA_Blue(oVGA_B),
.filtered_Red(filtered_R),
.filtered_Green(filtered_G),
.filtered_Blue(filtered_B)
);
Greyscale_Filter greyscale_Filter (
.filtered_red(filtered_R),
.filtered_green(filtered_G),
.filtered_blue(filtered_B),
.greyscale_red(greyscale_R),
.greyscale_blue(greyscale_G),
.greyscale_green(greyscale_B)
);
Binary_Filter binary_filter (
.greyscale_red(greyscale_R),
.greyscale_green(greyscale_G),
.greyscale_blue(greyscale_B),
.binary_red(binary_R),
.binary_green(binary_G),
.binary_blue(binary_B)
);
Inverter inverter (
.clk(VGA_CTRL_CLK),
.binary_red(binary_R),
.binary_green(binary_G),
.binary_blue(binary_B),
.inverted_red(inverted_R),
.inverted_green(inverted_G),
.inverted_blue(inverted_B)
);
你真的有二進制圖像(每像素1位)或只是一個黑白圖像? – Qiu 2014-11-20 20:49:29
我想這在技術上是黑白圖像。我會進行彩色濾鏡以找到紅光,然後在任何紅色的位置,我將三個顏色通道設置爲255(白色),而不是任何地方設置爲0(黑色) – Mike 2014-11-20 21:07:11
您的輸入可能不是純黑色和白色,但有灰色陰影。例如,如果'binary_red'爲1(接近黑色),則'inverted_red'將爲0(黑色),而不是254(接近白色)。嘗試使用'〜'運算符進行反轉:ex'assign inverted_red =〜binary_red;' – Greg 2014-11-20 21:08:46