【数字图像处理】素描风格变换(一)—— 基本原理

发布时间:2024年01月13日

在绘画风格中,素描风格是一种以黑白灰(或单色)色调为主的绘画风格,注重表现物体的轮廓、结构、明暗关系等细节。在数字图像处理中,素描风格变换是一种图像风格变换的过程,用于呈现素描的视觉效果。本文主要介绍数字图像素描风格变换的基本原理,以及使用 紫光同创 PGL22G 开发板实现数字图像素描风格变换的过程。

目录

1 素描风格变换

2 FPGA布署与实现

2.1 功能与指标定义

2.2 逻辑设计


1 素描风格变换

????????在绘画风格中,素描风格是一种以黑白灰(或单色)色调为主的绘画风格,注重表现物体的轮廓、结构、明暗关系等细节。

图像素描风格效果有以下 4 个特征:

(1)整体画面为黑白灰色;

(2)主要表现物体的边界,且边界线条颜色较重;

(3)相同或相近色彩区域白色;

(4)不同区域明暗不同,略有光源效果。

????????在数字图像处理中,素描风格变换是一种图像风格变换的过程,用于呈现素描的视觉效果。对于彩色图像,素描风格变换的大致思路如下:

(1)RGB 转灰度图。以 RGB 格式读取图像,然后进行 RGB 转灰度图处理;

(2)边缘检测。在灰度图的基础上,选择合适的边缘检测模板,得到梯度信息;

(3)灰度变换。在三维空间中设置一个虚拟点光源(位于图像上方,俯仰角 \theta_{el},方位角?\theta_{az}),计算梯度在光源方向上的投影,梯度趋于光源方向的像素点,灰度值越大。

? ? ? ? 使用 Matlab 进行验证,代码如下:

clc, clear

% RGB转灰度图
im = imread('./loopy.png');
im_gray = im2gray(im);

% 边缘检测
depth = 10;
h = fspecial('log');
edge_x = double(imfilter(im_gray, h))*depth/100;
edge_y = double(imfilter(im_gray, h'))*depth/100;

A = sqrt(edge_x.^2 + edge_y.^2 + 1);
uni_x = edge_x./A;
uni_y = edge_y./A;
uni_z = 1./A;

% 模拟光源
theta_el = pi/2.2;
theta_az = pi/2;
dx = cos(theta_el)*cos(theta_az);
dy = cos(theta_el)*sin(theta_az);
dz = sin(theta_el);

% 模拟光源
theta_el = pi/2.2;
theta_az = pi/2;
dx = cos(theta_el)*cos(theta_az);
dy = cos(theta_el)*sin(theta_az);
dz = sin(theta_el);

subplot(121)
imshow(im2uint8(im))
title('原图像')
subplot(122)
imshow(im2uint8(im_new))
title('处理后图像')

2 FPGA布署与实现

2.1 功能与指标定义

????????使用紫光同创 FPGA 平台实现素描风格变换功能,FPGA 需要实现的功能与指标如下:

(1)与电脑的串口通信,用于接收上位机下发的图像数据,波特率为 256000 Bd/s;

(2)素描风格变换:包括?RGB 转灰度图、边缘检测、灰度变换处理过程,实现数字图像的素描风格变换;

(3)DDR3 读写控制,将处理前后的图像数据分别写入 DDR3 的不同区域,实现图像的拼接;

(4)HDMI 输出,输出一路 HDMI 信号源,用于将拼接后的图像显示在外接显示器上,分辨率为 1024×768。
?

2.2 逻辑设计

? ? ? ? 基于紫光同创 PGL22G 平台,进行逻辑设计,以下是工程主要的模块与功能说明。

模块名称功能说明
top_uartuart_rx_slice串口接收驱动模块
uart_rx_parse串口数据解析模块,从上位机接收 8bit 原始图像
top_vidinconv_rgb2grayRGB 转灰度图模块
conv_gradient边缘检测模块,对 3x3 的区域进行 Preweitt 边缘检测
conv_sketch素描风格灰度变换模块
vidin_pipelinepipeline 单元模块,缓存两行图像数据,并将数据提交到 ddr3 数据调度模块
vidin_pipeline_spipeline 简化单元模块,缓存两行图像数据
merge_outdvi_timing_genHDMI 视频时序产生模块
dvi_ddr_rd根据 HDMI 控制信号,提交读指令到 ddr3 数据调度模块
dvi_encoderHDMI 输出编码(8b10b 编码)与输出驱动模块

? ? ? ? 以下是素描风格变换的流程图。

素描风格变换流程图

(1)conv_rgb2gray 模块:根据 RGB-Gray 灰度变换公式,使用 FPGA 乘法器资源,得到灰度数据,实现 RGB 转灰度图。

(2)conv_gradient 模块:对图像 3x3 区域进行 Prewitt 边缘检测,得到水平方向与垂直方向的梯度信息,实现灰度图像的梯度计算。

(3)conv_sketch 模块:使用 Dual-port RAM 存储灰度变换函数,根据水平与垂直方向的梯度,得到转换后的灰度值,实现素描风格的灰度变换。

以下是工程资源报告。

文章来源:https://blog.csdn.net/sxyang2018/article/details/135566225
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。