FPGA - 图像灰度化

一,灰度图像概念

        灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。

        一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。

        Gray 图像:灰度(gray)图像就是我们常说的黑白图像,由黑到白为灰阶,其值域为 0- 255(8bit)。

二,彩色图像灰度化处理方法

1,分量法

        将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种 灰度图像。具体表达式如下。

其中,gray1 (𝑖,𝑗), gray2 (𝑖,𝑗), gray3 (𝑖,𝑗)为转换后的灰度图像在(i,j)处的灰度值, R(i,j),G(i,j),B(i,j)分别为转换前的彩色图像在(i,j)处 R、G、B 三个分量的值。 

2,最大值法

将彩色图像中的三分量亮度 R,G,B 的最大值作为灰度图的灰度值。具体表达式如下。

3,平均值法 

将彩色图像中的三分量亮度求平均得到一个灰度值。如下:

上式中有除法,考虑到在 FPGA 中实现除法比较的消耗资源,我们可以将其转换一下,

对 256/3 做近似取整处理,将 256/3 替换成 85,则公式变为如下:

然后利用移位的方法去实现除法(右移8位):

而乘法也可以用移位实现,85 = 2^6 + 2^4 + 2^2 + 2^0;

4,加权平均法

将三个分量以不同的权值进行加权平均:

实际应用时,为了能避免浮点运算以及除法运算,可以先将式子缩放 1024 倍来实现运算算法,如下: 

通过近似取整处理后得到近似公式:

也可以压缩到 8 位以内,式子变为如下。具体压缩到多少位可以根据实际需求。

其中乘法和除法都可使用移位实现。

三,代码实现

分量法和最大值法较为简单,这里实现平均值法和加权平均。

 1,平均值法

代码如下:

module Avg_Gray(input			clk 		,input			reset 		,input			rgb_vaild 	,input	[7:0]	red_in 		,input	[7:0]	green_in 	,input	[7:0]	blue_in 	,output	[7:0]	gray_o		,output	reg		gray_vaild);//求平均法GRAY = (R+B+G)/3=((R+B+G)*85)>>8wire 	[9 :0]		sum_rgb		;reg 	[15:0]		gray_r	;assign sum_rgb = red_in + green_in + blue_in;always @(posedge clk ) if (reset) begingray_r <= 0;endelse if (rgb_vaild) begingray_r <= (sum_rgb << 6) + (sum_rgb << 4) + (sum_rgb << 2) + sum_rgb;endassign gray_o = gray_r[15:8];always @(posedge clk) begingray_vaild <= rgb_vaild;endendmodule

 2,加权平均值

代码如下:

module Weight_avg_Gray(input			clk 		,input			reset 		,input			rgb_vaild 	,input	[7:0]	red_in 		,input	[7:0]	green_in 	,input	[7:0]	blue_in 	,output	[7:0]	gray_o		,output	reg		gray_vaild);//灰度转换公式Gray = R*0.299+G*0.587+B*0.114=(R*77 + G*150 + B*29) >>8wire 	[15:0]		red_77		;wire	[15:0]		green_150	;wire 	[15:0]		blue_29		;reg 	[15:0]		sum_rgb 	;assign red_77 = (red_in<<6) + (red_in<<3) + (red_in<<2) + red_in;assign green_150 = (green_in<<7) + (green_in<<4) + (green_in<<2) + (green_in<<1);assign blue_29 = (blue_in<<4) + (blue_in<<3) + (blue_in<<2) + (blue_in<<1);always @(posedge clk ) if (reset) beginsum_rgb <= 0;endelse if (rgb_vaild) beginsum_rgb <= red_77 + green_150 + blue_29;endassign gray_o = sum_rgb[15:8];always @(posedge clk) begingray_vaild <= rgb_vaild;endendmodule

 四,总结

在FPGA中,如果涉及到浮点数运算,除法运算,乘法运算,我们都可以将其进行变换,使用移位的方法实现。关于具体FPGA - 数 - 加减乘除可以看我的这篇文章:FPGA - 数 - 加减乘除-博客

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

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

相关文章

如何预防和处理他人盗用IP地址?

IP地址的定义及作用 解释 IP 地址在互联网中的作用。它是唯一标识网络设备的数字地址&#xff0c;类似于物理世界中的邮政地址。 1、IP地址盗窃的定义 解释一下什么是IP地址盗用&#xff0c;即非法使用他人的IP地址或者伪造IP地址的行为&#xff0c;这种行为可能引发法律和安…

hadoop离线与实时的电影推荐系统-计算机毕业设计源码10338

摘 要 随着互联网与移动互联网迅速普及&#xff0c;网络上的电影娱乐信息数量相当庞大&#xff0c;人们对获取感兴趣的电影娱乐信息的需求越来越大,个性化的离线与实时的电影推荐系统 成为一个热门。然而电影信息的表示相当复杂&#xff0c;己有的相似度计算方法与推荐算法都各…

黑盒测试、白盒测试和灰盒测试的概念

黑盒测试、白盒测试和灰盒测试的概念 黑盒测试、白盒测试和灰盒测试是软件测试中的三种基本策略&#xff0c;它们分别关注不同的测试角度&#xff1a; 黑盒测试&#xff08;Black-box testing&#xff09;&#xff1a; 黑盒测试也称为功能测试或行为测试&#xff0c;它完全基…

Flask的session、闪现和g对象

Flask的session、闪现和g对象 一、Session Flask中的Session机制允许在客户端和服务器之间保持状态信息&#xff0c;这对于构建交互式Web应用至关重要。 1. Session的使用&#xff1a; 在Flask中&#xff0c;Session默认是基于cookie的&#xff0c;它不在服务端存储数据&am…

async、await 官宣:JavaScript 中的异步编程新纪元

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 async/await 是 ECMAScript 2017 标准中引入的一种用于处理异步操作的语法糖。它基于 Promise 和 Gen…

Cesium czml创建目标

一次性加载 (method) DataSourceCollection.add(dataSource: Cesium.DataSource | Promise<Cesium.DataSource>): Promise<Cesium.DataSource>const czml [{id: "document",name: "CZML Point",version: "1.0",clock: {"inte…

02逻辑代数与硬件描述语言基础

2.1 逻辑代数&#xff08;简单逻辑的运算&#xff09; 2.2 逻辑函数的卡诺图&#xff08;从图论的角度&#xff09;化简法 2.3 硬件描述语言Verilog HDL基础&#xff08;研究生阶段才用得到&#xff09; 要求&#xff1a; 1、熟悉逻辑代数常用基本定律、恒等式和规则。 2、掌握…

武汉高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步和工业4.0的深入推进&#xff0c;智能制造已成为现代工业发展的重要方向。在这一背景下&#xff0c;武汉高校大学智能制造实验室积极响应国家号召&#xff0c;致力于将先进的数字孪生技术与智能制造教育相结合&#xff0c;打造了一个集教学、实训、科研于一体…

【JavaScript】事件绑定

目录 一、什么是事件 二、常见事件 2.1 鼠标事件 2.2 键盘事件 2.3 表单事件 2.4 页面加载事件 三、浏览器弹窗三种方式 四、事件绑定函数方式 五、事件触发方式 一、什么是事件 事件就是行为动作。在HTML中事件可以是浏览器的行为&#xff0c;也可以是用户的行为。当这些行为发…

基于esp-idf的arm2d移植

什么是ARM2D Arm在Github上发布了一个专门针对“全体” Cortex-M处理器的2D图形加速库——Arm-2D 我们可以简单的把这个2D图形加速库理解为是一个专门针对Cortex-M处理器的标准“显卡驱动”。虽然这里的“显卡驱动”只是一个夸张的说法——似乎没有哪个Cortex-M处理器“配得上…

丝杆支撑座:滚珠丝杆稳定运行的守护者!

丝杆支撑座是丝杆和电机之间连接的重要组成部分&#xff0c;发挥着非常重要的功能。提到丝杆支撑座和滚珠丝杆&#xff0c;很多人都会想到支撑关系&#xff0c;但丝杆支撑座作为滚珠丝杆系统中至关重要的角色&#xff0c;其作用远不止于简单的支撑。 丝杆支撑座安装过程非常简单…

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商&#xff0c;成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力&#xff0c;能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

CS-隐藏防朔源-数据转发-iptables(Linux自带的防火墙)

免责声明:本文仅做技术交流与学习... 目录 准备环境: 1-iptables转发机设置转发: 2-CS服务器配置iptables服务器的IP 准备环境: 两台外网服务器. --iptables服务器就是做一个中转...封了中转就没了... 1-iptables转发机设置转发: iptables -I INPUT -p tcp -m tcp --dport 8…

一个简化的C语言扫地机器人系统编写步骤

使用C语言直接编写一个完整的智能扫地机器人系统是非常复杂的&#xff0c;因为这不仅涉及到底层硬件的控制&#xff0c;还包括网络通信、用户交互等多个方面。然而&#xff0c;我们可以将任务拆分为几个部分&#xff0c;并专注于使用C语言编写与硬件交互和可能的一些基础网络通…

ACC:Automatic ECN Tuning for High-Speed Datacenter Networks 相关知识点介绍(一)

目录 ACC&#xff08;Adaptive Congestion Control&#xff09; 总结 结合 ACC 和 ECN ECN ECN&#xff08;Explicit Congestion Notification&#xff09; 静态 ECN 动态 ECN 对比 总结 FCT——flow completion time 具体解释 小鼠流和大象流 小鼠流&#xff08;…

【最新综述】基于伪标签的半监督语义分割

Semi-Supervised Semantic Segmentation Based on Pseudo-Labels: A Survey 摘要&#xff1a; 语义分割是计算机视觉领域的一个重要而热门的研究领域&#xff0c;其重点是根据图像中像素的语义对其进行分类。然而&#xff0c;有监督的深度学习需要大量数据来训练模型&#xff…

GPT-5的到来:智能飞跃与未来畅想

IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂确认了GPT-5的发布计划&#xff0c;预计将在一年半后推出。穆拉蒂形象地将GPT-4到GPT-5的飞跃比作高中生到博士生的成长。这一飞跃将给我们带来哪些变化&#xff1f;GPT-5的…

电路笔记(电源模块):TPS82130降压模块

芯片引脚说明 Layer 1 1 2 3 4 5 6 7 8 SS/TR PG FB VOUT EN VIN GND VOUT Thermal Pad 使能引脚&#xff0c;高电平启动。 反馈参考引脚。 连接到该引脚的外部电阻分压器对输出电压进行编程。 电源开漏输出引脚。 软启动和电压跟踪引脚。 上拉电阻可以连接到任何低于6V的电压。…

如何使用WxPusher向个人微信推送发送实时消息,比如定时任务等

wxpusher-sdk-java这个框架开源了&#xff1a;GitHub - wxpusher/wxpusher-sdk-java: 微信消息实时推送服务[WxPusher]的Java版本sdk&#xff0c;可以通过API实时给个人微信推送消息。wechat pusher. 文档地址&#xff1a;WxPusher微信推送服务 WxPusher (微信推送服务)是一个…

Spring Boot与MyBatis的集成应用

Spring Boot与MyBatis的集成应用 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来聊聊Spring Boot与MyBatis的集成应用。MyBatis是一款优秀的持久层框…