FPGA实现图像对比度自动调整,提供2套工程源码和技术支持

news2024/11/24 22:35:44

目录

  • 1.算法原理介绍
  • 2.HLS算法实现
  • 3.工程1介绍:zynq7100实现
  • 4.工程2介绍:Kintex7实现
  • 5.上板调试验证
  • 6.福利:工程源码获取

1.算法原理介绍

使用直方图均衡技术实现
使用直方图均衡技术将原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布,是一种常用的图像增强方法。
处理过程如下:
在这里插入图片描述
首先,我们需要将RGB888图像转化为YCrCb,统计当前Y分量直方图分布(应用于下一帧),并通过上一帧的统计数据均衡化当前 Y 分量,再转换回RGB888并输出。

2.HLS算法实现

算法采用HLS实现,处理流程部分代码如下:

#pragma HLS dataflow
	hls::AXIvideo2Mat(src_axi, img1);
	Cvt_RGB_to_YCrCb(img1, img2);
	dualAryEqualize<HLS_8UC3, HLS_8UC3, IMG_MAX_HEIGHT, IMG_MAX_WIDTH, 256>(img2, img3, adj);
	Cvt_YCrCb_to_RGB(img3, img5);
	hls::Mat2AXIvideo(img5, dst_axi);

需要完整HLS代码的兄弟可以看完文章后再最后的福利章节得到源码的获取渠道;
HLS综合后的延时和逻辑资源占用统计如下:
在这里插入图片描述
HLS综合编译后,即可到处RTL得到HLS的IP核,可在vivado中直接调用;

3.工程1介绍:zynq7100实现

开发板:zynq7100开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头,输入分辨率1280X720;
输出:HDMI,输出分辨率1280X720;
工程BD如下:
在这里插入图片描述
代码架构如下:
在这里插入图片描述
SDK主函数代码如下:

#include "I2C_16bit.h"
#include "xiicps.h"
#include "xil_io.h"
#include "xparameters.h"
#include "helai_vdma.h"
#include "xcontrastadj.h"
#include "xil_cache.h"

XIicPs	Iic;
XContrastadj contrastadjadjInstance;

void main(){
	I2C_config_init();
	XContrastadj_Initialize(&contrastadjadjInstance, XPAR_CONTRASTADJ_0_DEVICE_ID);
	XContrastadj_EnableAutoRestart(&contrastadjadjInstance);
	//XContrastadj_Set_adj(&contrastadjadjInstance, 50);
	XContrastadj_Start(&contrastadjadjInstance);
	helai_vdma();
	while(1);

	while(1){
		for(int adj=0; adj<=100; adj++){
			XContrastadj_Set_adj(&contrastadjadjInstance, adj);
			usleep(100000);
		}
	}

}

可以在while(1)死循环里自动调整对比度;
也可以使用XContrastadj_Set_adj(&contrastadjadjInstance, 50)单独调整对比度,这里的入口参数 50即为自定义设置的对比度;

4.工程2介绍:Kintex7实现

开发板:Kintex7开发板;
开发环境:vivado2019.1;
输入:OV5640摄像头,输入分辨率1280X720;
输出:HDMI,输出分辨率1280X720;
工程BD如下:
在这里插入图片描述
代码架构如下:
在这里插入图片描述
SDK主函数代码如下:

#include <stdio.h>
#include "xgpio.h"
#include "oak_iic.h"
#include "unistd.h"
#include "helai_vdma.h"
#include "helai_color_back.h"
#include "xcontrastadj.h"

XGpio_Config *XGpioCfg;
XGpio led_gpio;
XContrastadj contrastadjadjInstance;

#define	AXI_GPIO_DEVICE_ID	XPAR_GPIO_0_DEVICE_ID

int main(){
	XGpioCfg = XGpio_LookupConfig(AXI_GPIO_DEVICE_ID);
	XGpio_CfgInitialize(&led_gpio, XGpioCfg, XGpioCfg->BaseAddress);
	XGpio_SetDataDirection(&led_gpio, 1, 0);	//output
	XGpio_DiscreteWrite(&led_gpio, 1, 0);
	oak_i2c_init(OV5640_IIC_BASEADDR, 1000000, 0x78>>1, IIC_REG_LEN16, IIC_DATA_LEN8);
	OV5640_Init(OV5640_IIC_BASEADDR,1280,720);
	XContrastadj_Initialize(&contrastadjadjInstance, XPAR_CONTRASTADJ_0_DEVICE_ID);
	XContrastadj_EnableAutoRestart(&contrastadjadjInstance);
	XContrastadj_Set_adj(&contrastadjadjInstance, 100);
	XContrastadj_Start(&contrastadjadjInstance);
	helai_vdma();
	while(1){
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 1);
		usleep(500000);
		XGpio_DiscreteWrite(&led_gpio, 1, 0);
	}
}

5.上板调试验证

工程1开发板连接如下:
在这里插入图片描述
工程2开发板连接如下:
在这里插入图片描述

下面给出不同对比度的输出效果:
设置对比度为0时的输出效果如下:
在这里插入图片描述
可以看到画面除白色衣区域外其他部分较暗;
设置对比度为50时的输出效果如下:
在这里插入图片描述
可以看到画面整体变得更亮,白色衣服更白,左边的书籍堆放区也亮了很多;
设置对比度为100时的输出效果如下:
在这里插入图片描述
可以看到图像更加敞亮,甚至有点刺眼了。。。

6.福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料如下:获取方式:私。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/45774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习axure都要经历哪个阶段,如何快速入门

作为初学Axure同学们&#xff0c;正在学习AxureRP在这个过程中&#xff0c;我们应该经历每个阶段&#xff0c;掌握每个阶段的特点&#xff0c;明确如何在不同阶段学习&#xff0c;这样我们才能快速做到axure快速掌握这个工具。还能根据自己的实际工作需要&#xff0c;掌握自己的…

关系抽取(二)远程监督方法总结

目录 前言 1. 远程监督关系抽取开山之作 1.1 介绍 1.2 训练过程 1.2.1 数据标注方法 1.2.2 训练方法 1.3 测试过程 1.4 思考 1.5 总结 2. PCNN 2.1 介绍 2.2 模型结构 2.2.1 文本特征表示 2.2.2 卷积 2.2.3 分段最大池化 2.2.4 softmax多分类 2.3 多实例学习的…

【elementUI样式】模态框中的el-select下拉框不跟随页面滚动问题

文章目录1.在el-select标签中设置:popper-append-to-body"false"2.样式穿透&#xff08;比较普遍的写法&#xff09;模态框中的el-select下拉框不跟随页面滚动问题在使用elementUI写界面的时候&#xff0c;偶然遇到了如下图所示bug当页面滚动的时候&#xff0c;el-se…

JVM之类加载子系统

JVM类加载子系统类的加载过程类加载器双亲委派机制类的加载过程 初始化阶段解读 初始化阶段就是执行构造类加载器<clinit>()的过程 该方法不需要定义&#xff0c;是javac编译器自动收集类中所有类变量的赋值动作和静态代码中的语句合并而来 构造方法中指令按照语句在源文…

学习Retrofit后,你还需要明白这些……

在学习Retrofit后&#xff0c;由于它本身就是OKHttp的封装&#xff0c;面试中也经常会被一起问到&#xff1b;单纯的解析它的源码学习难免会有点无从下手&#xff0c;往往让人抓不住重点&#xff0c;学习效率并不是很高&#xff0c;本文从提出几个问题出发&#xff0c;带着问题…

[附源码]SSM计算机毕业设计校园新闻管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SpringBoot、EasyPoi、Echarts 实现文档导入、出、图表显示 (饼状图、柱状图) 保姆级教程

一、介绍环境 EasyPOI: 现在我们就来介绍下EasyPoi,首先感谢EasyPoi 的开发者​。EasyPoi开源 easypoi 是为了让开发者快速的实现excel&#xff0c;word,pdf的导入导出&#xff0c;基于Apache poi基础上的一个工具包。easypoi教程 Echarts: …

c++ - 第15节 - 二叉树进阶

1. 二叉搜索树 1.1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节…

一次 Netty 代码不健壮导致的大量 CLOSE_WAIT 连接原因分析

背景 我们线上有一个 dubbo 的服务&#xff0c;出现大量的 CLOSE_WAIT 状态的连接&#xff0c;这些 CLOSE_WAIT 的连接出现以后不会消失&#xff0c;这就有点意思了&#xff0c;于是做了一下分析记录如下。 首先从 TCP 的角度看一下 CLOSE_WAIT CLOSE_WAIT 状态出现在被动关闭…

数据分析之金融数据分析

一 前言 金融业是一个持续发展的行业&#xff0c;金融业正在使用数据分析进行金融&#xff0c;以最大程度地减少管理各种金融活动所需的精力和时间。这些公司正在利用数据分析和机器学习原理的力量。这有助于他们发现金融行业各个领域所需的进步&#xff0c;以重塑其业务战略。…

虹科分享 | 网络仿真器 | 预测云中对象存储系统的实际性能

对象存储是一种在云中存储非结构化数据的方法&#xff0c;从理论上讲&#xff0c;它使得以其原始格式存储几乎无限量的数据成为可能。在这种存储架构中&#xff0c;数据被作为对象进行管理&#xff0c;而传统的系统则将数据作为块或分层文件进行处理。对象存储可以在内部使用&a…

一条Select语句在MySQL-Server层的执行过程

select customer_id,first_name,last_name from customer where customer_id14;先连接到数据库&#xff0c;连接器 负责跟客户端建立连接、获取权限、维持和管理连接。 客户端再次发送请求&#xff0c;就会使用同一个连接&#xff0c;客户端如果长时间没动静&#xff0c;就会断…

用R Shiny生态快速搭建交互Web网页APP应用

什么是Shiny&#xff1f; Shiny包可以快速搭建基于R的交互网页应用。对于web的交互&#xff0c;之前已经有一些相关的包&#xff0c;不过都需要开发者熟悉网页编程语言&#xff08;html,CSS,JS&#xff09;。最近我们被客户要求撰写关于R Shiny的研究报告&#xff0c;包括一些…

使用 Huggingface Trainer 对自定义数据集进行文本分类

文本分类是一项常见的 NLP 任务&#xff0c;它根据文本的内容定义文本的类型、流派或主题。Huggingface&#x1f917; Transformers 提供 API 和工具来轻松下载和训练最先进的预训练模型。Huggingface Transformers 支持 PyTorch、TensorFlow 和 JAX 之间的框架互操作性。模型还…

JAVA学习-java基础讲义01

java基础讲义一 java语言1.1 java语言介绍1.1.1 什么是java1.1.2 java之父1.1.3 java语言发展史1.2 java语言的特点二 java环境搭建相关2.1 Java环境介绍2.1.1 虚拟机介绍2.1.2 JVM介绍2.2 Java跨平台2.2.1 跨平台2.2.2 跨平台原理2.3 java运行过程2.4 JDK、JRE、JVM关系图2.4.…

JaVers:自动化数据审计

在开发应用程序时&#xff0c;我们经常需要存储有关数据如何随时间变化的信息。此信息可用于更轻松地调试应用程序并满足设计要求。在本文中&#xff0c;我们将讨论 JaVers 工具&#xff0c;该工具允许您通过记录数据库实体状态的更改来自动执行此过程。 Javers如何工作&#x…

RT-thread lts-v3.1.x版本,GD32F450以太网,上电之后有一定概率ping不通问题处理。

先给结论 官方驱动没有按照GD32F4XX手册要求&#xff0c;等待ENET_DMA_CTL第20bit清0后再写 synopsys_emac.c 文件&#xff0c;void EMAC_FlushTransmitFIFO(struct rt_synopsys_eth * ETHERNET_MAC)函数&#xff0c;增加一句判断即可解决。 /*** Clears the ETHERNET transm…

Kotlin高仿微信-第4篇-主页-消息

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

Android Studio / IDEA 调试金手指:live template自动打印方法名以及所有变量

ctrl alt s 搜设置&#xff0c;template&#xff0c;结果是在 live template 区域设置代码模板的&#xff0c;不知这功能和直播有何关系&#xff0c;live stream&#xff1f; live template 就是自动完成一段代码。比如输入 fori&#xff0c;然后ctrl空格补全循环体&#xf…

Apache-DButils以及Druid(德鲁伊) 多表连接查询的解决方案:两种

Apache-DButils以及Druid(德鲁伊) 多表连接查询的问题 每博一文案 张爱玲说&#xff0c;于千万人之中&#xff0c;遇到你所要遇到的人&#xff0c;于千万年之中&#xff0c;时间的无涯的荒野里&#xff0c;没有 早一步&#xff0c;也没有晚一步&#xff0c;刚巧赶上了。 人生海…