教您使用FPGA来画铅笔画

  • 2019 年 10 月 29 日
  • 筆記

教您使用FPGA来画铅笔画

作者:lee神

1 概要

灰度级(8bit 0到255 )代表从黑到白,中间的介于黑白之间。对比度比较明显的灰度级分布比较均匀,二值图像是灰度图像的特例。

本节没有多大的知识难度,主要在于灰度的阈值调节来形成二值灰度图像,经过此节我们也可以使用FPGA阈值调节来绘出油笔画或者钢笔画。

本节主要以示例图像为主供大家欣赏。

2 FPGA实现

图1 实现铅笔画FPGA模块框图

图1中,我们输入的是彩色图像(RGB格式),经过串口传图进入FPGA,通过Ycbcr模块后变成Ycbcr格式图像,其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值。

最后进行阈值比较后输出二值图像(Binary image)或者更多值图像。

FPGA源码:

//————————————————

// THRESHOLD

//————————————————

parameter THRESHOLD = 8'd 100;

//————————————————

//Gray image threshold processing

//———————————————–

always @(posedge TFT_clk or negedge Rst_n) begin

if(!Rst_n)

gray <= 8'h00;

else if(gray_en)

if(o_y_8b > THRESHOLD)

gray <= 8'hff;

else

gray <= 8'h00;

else

;

end

assign TFT_de = gray_en;

assign TFT_rgb = {gray[7:3],gray[7:2],gray[7:3]}; //Y

代码解释:

根据灰度阈值的大小不同我们将图像大于阈值的部分变成白色,小于的部分变成黑色。

结果展示:

图2 RGB图像原图

图3 lena二值画

图4 car原图

图5 阈值处理后的car

结果分析:

由于手机拍照的技术不好导致不能实际显示。对于图像过黑我们可以增加输出的灰度值使它更加接近铅笔颜色。对于背景过度明亮我们可以降低输出的背景量度,已达到效果最好。

如果需要得到效果更佳的铅笔画我们可以采用多阈值多个不同颜色输出处理。

推荐阅读

FPGA图像处理之rgbtogray算法的实现