当前位置: 首页 > news >正文

Python与FPGA——局部二值化

文章目录

  • 前言
  • 一、局部二值化
  • 二、Python局部二值化
  • 三、FPGA局部二值化
  • 总结


前言

  局部二值化较全局二值化难,我们将在此实现Python与FPGA的局部二值化处理。


一、局部二值化

  局部二值化就是使用一个窗口,在图像上进行扫描,每扫出9个像素求平均,再和阈值进行比较。如果9个像素的平均值大与等于阈值,就将窗口中心对应的图像像素设置为255,否则就设置为0。

在这里插入图片描述

二、Python局部二值化

  以下虽然是局部二值化处理,但是在此基础上,增加了阈值乘以一个ratio小数,可以调整阈值,实现局部阈值二值化处理。

import numpy as np
import matplotlib.pyplot as plt
img = plt.imread("lenna.png")
gray = 0.299 * img[:, :, 0] + 0.587 * img[:, :, 1] + 0.114 * img[:, :, 2] 
gray = gray * 255#图像是[0-1]--->[0-255]
def local_threshold(gray, ratio, threshold, size=3):h, w = gray.shapem = int((size - 1) / 2)local_image = np.zeros((h, w))for i in range(m, h - m):for j in range(m, w - m):value = np.floor((np.sum(gray[i - m: i + m + 1, j - m: j  + m + 1]) / (size ** 2)) * ratio)if(value <= threshold):local_image[i, j] = 0else:local_image[i, j] = 255return local_image.astype(np.uint8)local_image = local_threshold(gray, 0.9, 128, 3)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 2, 1)
ax.set_title("gray image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(gray, cmap="gray")
ax = fig.add_subplot(1, 2, 2)
ax.set_title("local image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(local_image, cmap="gray")

在这里插入图片描述

三、FPGA局部二值化

module  ycbcr2binary_local
(input	wire			vga_clk		,//vga时钟input	wire			sys_rst_n	,//复位信号input	wire	[7:0]	y_data		,//灰度处理的图像像素input	wire			rgb_valid	,//vga显示有效区域output	wire	[15:0]	binary_data	//二值化像素
);//shift ram
wire	[7:0]	data_row1	;
wire	[7:0]	data_row2	;
wire	[7:0]	data_row3	;
//3*3像素数据
reg		[7:0]	p11			;
reg		[7:0]	p12			;
reg		[7:0]	p13			;
reg		[7:0]	p21			;
reg		[7:0]	p22			;
reg		[7:0]	p23			;
reg		[7:0]	p31			;
reg		[7:0]	p32			;
reg		[7:0]	p33			;wire	[7:0]	temp	    ;
//Y值有效信号
reg				y_valid		;assign  data_row3 = y_data  ;
//中值拼接565
assign  temp = (p11 + p12 + p13 + p21 + p22 + p23 + p31 + p32 + p33) / 9;//9个像素平均值
assign  binary_data = (temp >= 8'd128) ? 16'hffff: 16'h0000;//比较并设置像素
always@(posedge vga_clk or negedge sys_rst_n)	if(sys_rst_n == 1'b0)y_valid  <=  1'b0  ;elsey_valid  <=  rgb_valid  ;always@(posedge vga_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)begin{p11,p12,p13}  <=  24'd0  ;{p21,p22,p23}  <=  24'd0  ;{p31,p32,p33}  <=  24'd0  ;endelse  if(y_valid == 1'b1)begin{p11,p12,p13}  <= {p12,p13,data_row1}  ;{p21,p22,p23}  <= {p22,p23,data_row2}  ;{p31,p32,p33}  <= {p32,p33,data_row3}  ;end	elsebegin{p11,p12,p13}  <=  24'd0  ;{p21,p22,p23}  <=  24'd0  ;{p31,p32,p33}  <=  24'd0  ;end	
//移位寄存器
shift_ram_gen  shift_ram_gen_inst
(.clock 		(vga_clk	),.shiftin	(data_row3	),.shiftout 	(			),.taps0x 	(data_row2	),.taps1x 	(data_row1	)
);endmodule

在这里插入图片描述

  在FPGA中,小编没有将阈值乘上一个小数,如果要和Python实现一致,你也可以尝试加上。


总结

  图像二值化也就告一段落,二值化比较基础,下一章节聊聊sobel边缘检测。还是一样,sobel是谁不重要,重要的是要用他去完成sobel检测。敬请期待。

相关文章:

Python与FPGA——局部二值化

文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难&#xff0c;我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口&#xff0c;在图像上进行扫描&#xff0c;每扫出9个像素求平均…...

shell文本处理工具-shell三剑客1

shell脚本常用基础命令2 shell脚本常用基础命令 shell脚本常用基础命令2一、grep用法二、sed用法2.1p参数 &#xff08;显示&#xff09;n参数&#xff08;只显示处理过的行&#xff09; 文本处理三剑客&#xff1a;grep sed awk 一、grep用法 grep -E egrep (扩展搜索正文表…...

函数的传入参数-传参定义

基于函数的定义语法&#xff1a; def 函数名&#xff08;传入参数&#xff09;函数体return 返回值 可以有如下函数定义&#xff1a; def add(x,y):return xyprint(f"{x} {y}的结果是&#xff1a;{result}") 实现了&#xff0c;每次计算的是xy&#xff0c;而非…...

主流接口测试框架对比,究竟哪个更好用

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…...

常用python模板

1.简单脚本模板 def main():#代码逻辑if __name__"__main__":main() 2.类定义模板 Class Myclass:def __init__(self,parameter):self.parameterparameterdef my_method(self):#方法逻辑 3.函数定义模板 def my_function(parameter):#代码逻辑return result 4.…...

53. 最大子数组和(力扣LeetCode)

文章目录 53. 最大子数组和题目描述暴力&#xff08;运行超时&#xff09;贪心 53. 最大子数组和 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组…...

如何远程SSH连接在家的服务器主机

当您需要通过SSH远程连接到家里的服务器主机时&#xff0c;以下是更详细的实施步骤&#xff1a; 1. 确保服务器主机已开启SSH服务 安装SSH服务&#xff1a;首先&#xff0c;确保您的服务器主机上安装了SSH服务。根据您的操作系统&#xff0c;您可以使用相应的包管理器来安装。…...

【亲测有效】解决三月八号ChatGPT 发消息无响应!

背景 今天忽然发现 ChatGPT 无法发送消息&#xff0c;能查看历史对话&#xff0c;但是无法发送消息。 可能的原因 出现这个问题的各位&#xff0c;应该都是点击登录后顶部弹窗邀请 [加入多语言 alapha 测试] 了&#xff0c;并且语言选择了中文&#xff0c;抓包看到 ab.chatg…...

vue结合vue-electron创建应用程序

这里写自定义目录标题 安装electron第一种方式&#xff1a;vue init electron-vue第二种方式&#xff1a;vue add electron-builder 启动electron调试功能&#xff1a;background操作和使用1、覆盖窗口的菜单上下文、右键菜单2、监听关闭事件、阻止默认行为3、创建悬浮窗口4、窗…...

【C++】STL(二) string容器

一、string基本概念 1、本质 string是C风格的字符串&#xff0c;而string本质上是一个类 string和char * 区别&#xff1a; char * 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 2、特点 1、stri…...

PyCM:Python中的混淆矩阵库

PyCM&#xff1a;Python中的混淆矩阵库 在机器学习和数据科学领域&#xff0c;评估模型的性能是至关重要的。混淆矩阵是一种常用的评估工具&#xff0c;用于可视化和量化分类模型的预测结果。PyCM是一个开源的Python库&#xff0c;提供了丰富的功能来计算和分析混淆矩阵。本文将…...

Day22:安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用

目录 开发环境 数据导入-mysql架构&库表列 数据库操作-mysqli函数&增删改查 数据接收输出-html混编&超全局变量 第三方插件引用-js传参&函数对象调用 完整源码 思维导图 PHP知识点&#xff1a; 功能&#xff1a;新闻列表&#xff0c;会员中心&#xff0…...

IOS面试题object-c 61-70

61. 阐述isKindOfClass、isMemberOfClass、selector作用分别是什么&#xff1f;isKindOfClass&#xff1a;作用是某个对象属于某个类型或者继承自某类型。 isMemberOfClass&#xff1a;某个对象确切属于某个类型。 selector&#xff1a;通过方法名&#xff0c;获取在内存中的函…...

Git指令reset的参数soft、mixed与hard三者之间的区别

主要内容 reset默认不写参数&#xff0c;与使用mixed参数含义一样 为了描述简洁&#xff0c;使用下图说明&#xff1a; #mermaid-svg-LtChquRXlEV1j6og {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LtChquRXlEV1j…...

RGMII 接口调试

目录 硬件检查 软件检查 调试步骤 硬件检查 硬件工程师检查原理图和PCB&#xff0c;核查RGMII线路连接是否正确&#xff0c;PHY的 TX连接对端 RX&#xff0c;PHY的RX连接对端TX&#xff0c;原理图上以引脚序号引脚名 引脚类型(输入还是输出)逐一核查RGMII接口各个网络&#…...

Ubuntu 24.04 抢先体验换国内源 清华源 阿里源 中科大源 163源

Update 240307:Ubuntu 24.04 LTS 进入功能冻结期 预计4月25日正式发布。 Ubuntu22.04换源 Ubuntu 24.04重要升级daily版本下载换源步骤 (阿里源)清华源中科大源网易163源 Ubuntu 24.04 LTS&#xff0c;代号 「Noble Numbat」&#xff0c;即将与我们见面&#xff01; Canonica…...

软件设计模式:模板方法模式

1. 简介 模板方法模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤延迟到子类中实现。这样&#xff0c;可以在不改变算法结构的情况下&#xff0c;重新定义算法中的某些步骤。 2. 使用条件 模板方法模式适用于以下情况&#xff1a; 算法…...

【算法】Hash存储——开放寻址法

模拟散列表 维护一个集合&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个整数 x&#xff1b; Q x&#xff0c;询问整数 x是否在集合中出现过&#xff1b; 现在要进行 N次操作&#xff0c;对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N&am…...

STM32CubeIDE基础学习-STM32CubeIDE软件程序下载方法

STM32CubeIDE基础学习-STM32CubeIDE软件代码下载方法 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件代码下载方法前言第1章 代码下载第2章 下载器固件更新总结 前言 编写完代码&#xff0c;一般都会选择在线下载程序的方式进行验证该程序是否正确&#xff0c;如果发现结果和…...

LeetCode 174.地下城游戏 Python题解

地下城游戏 # 地下城游戏 """ 恶魔们抓住了公主并将她关在了地下城dungeon的右下角。地下城是由mxn个房间组成的二维网格。我们英勇的骑士最初被安置在左上角的房间里&#xff0c; 他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数…...

MGeo门址解析模型部署指南:ModelScope Token配置与权限设置

MGeo门址解析模型部署指南&#xff1a;ModelScope Token配置与权限设置 1. 引言&#xff1a;为什么你需要一个专业的地址解析工具&#xff1f; 想象一下这个场景&#xff1a;你是一家外卖平台的工程师&#xff0c;每天要处理数百万条用户填写的地址。这些地址五花八门——“X…...

Upscayl GPU加速问题终极解决方案:快速修复Vulkan兼容性错误

Upscayl GPU加速问题终极解决方案&#xff1a;快速修复Vulkan兼容性错误 【免费下载链接】upscayl &#x1f199; Upscayl - #1 Free and Open Source AI Image Upscaler for Linux, MacOS and Windows. 项目地址: https://gitcode.com/GitHub_Trending/up/upscayl Upsc…...

WeChatMsg完整教程:微信聊天记录永久保存与深度分析终极指南

WeChatMsg完整教程&#xff1a;微信聊天记录永久保存与深度分析终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

从OBD到UDS:一文搞懂ISO14229 0x19服务中排放与非排放DTC的查询差异与实战

从OBD到UDS&#xff1a;深度解析ISO14229 0x19服务中排放与非排放DTC的差异化处理 在汽车电子控制单元&#xff08;ECU&#xff09;的开发与测试中&#xff0c;诊断故障码&#xff08;DTC&#xff09;的管理一直是工程师面临的核心挑战之一。特别是随着全球排放法规的日益严格&…...

ESP32实战指南:ADC连续采样与摇杆数据采集

1. ESP32 ADC连续采样基础解析 第一次接触ESP32的ADC功能时&#xff0c;我完全被各种专业术语搞晕了。后来在实际项目中反复调试才发现&#xff0c;理解ADC的关键在于抓住几个核心概念。ESP32-S3内置了两个12位SAR ADC&#xff08;逐次逼近型模数转换器&#xff09;&#xff0c…...

Qwen3-ASR-0.6B方言对比:东北话与四川话识别效果

Qwen3-ASR-0.6B方言对比&#xff1a;东北话与四川话识别效果 1. 引言 方言识别一直是语音识别领域的难点和热点。中国地域辽阔&#xff0c;方言种类繁多&#xff0c;其中东北话和四川话作为使用人口众多的两大方言体系&#xff0c;在语音特点上有着显著差异。东北话以儿化音丰…...

GPT-SoVITS快速部署实战:手把手教你配置PyTorch环境,一键启动WebUI

GPT-SoVITS快速部署实战&#xff1a;手把手教你配置PyTorch环境&#xff0c;一键启动WebUI 你是不是也想试试那个很火的AI语音克隆工具&#xff0c;用自己的声音生成任何想说的话&#xff1f;GPT-SoVITS这个项目确实很吸引人&#xff0c;只需要一小段录音&#xff0c;就能“复…...

EldenRingSaveCopier终极教程:轻松实现艾尔登法环存档安全迁移

EldenRingSaveCopier终极教程&#xff1a;轻松实现艾尔登法环存档安全迁移 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 还在为《艾尔登法环》存档丢失而烦恼吗&#xff1f;这款开源工具EldenRingSaveCopie…...

AIGC 动态图表生成:从零到一实战指南

1. 为什么需要AIGC动态图表生成&#xff1f; 在日常工作中&#xff0c;我们经常需要将枯燥的数据转化为直观的图表。传统方式需要手动编写HTML、JS和ECharts代码&#xff0c;不仅耗时耗力&#xff0c;还容易出错。我曾经为了调整一个饼图的标签位置&#xff0c;花了整整一上午…...

WorkshopDL终极指南:如何免费下载1000+款Steam创意工坊模组

WorkshopDL终极指南&#xff1a;如何免费下载1000款Steam创意工坊模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为GOG或Epic平台游戏无法使用Steam创意工坊模组而烦恼…...