Python与FPGA——膨胀腐蚀

这篇具有很好参考价值的文章主要介绍了Python与FPGA——膨胀腐蚀。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

  腐蚀是指周围的介质作用下产生损耗与破坏的过程,如生锈、腐烂等。而腐蚀算法也类似一种能够产生损坏,抹去部分像素的算法。


一、膨胀腐蚀

  膨胀腐蚀之前需要对图像进行二值化处理,然后进行以下处理。

  腐蚀: P = P 1 & P 2 & P 3 & P 4 & P 5 & P 6 & P 7 & P 8 & P 9 P = P1 \& P2 \& P3 \& P4 \& P5 \& P6 \& P7 \& P8 \& P9 P=P1&P2&P3&P4&P5&P6&P7&P8&P9
  膨胀: P = P 1 ∣ P 2 ∣ P 3 ∣ P 4 ∣ P 5 ∣ P 6 ∣ P 7 ∣ P 8 ∣ P 9 P = P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 P=P1∣P2∣P3∣P4∣P5∣P6∣P7∣P8∣P9
  图像二值化如下。

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]
bin_image = np.where(gray >= 128, 1, 0)#处理成[0,1]像素

二、Python实现腐蚀算法

def bin_erosion(binary, n):
    h, w = gray.shape
    m = int((n - 1) / 2)
    erosion_image = np.zeros((h, w))
    for i in range(m, h - m):
        for j in range(m, w - m):
           erosion_image[i, j] = binary[i - 1, j - 1] & binary[i - 1, j] & binary[i - 1, j + 1] &\
                                 binary[i, j - 1] & binary[i, j] & binary[i, j + 1] & binary[i + 1, j - 1] &\
                                 binary[i + 1, j] & binary[i + 1, j + 1]
    return erosion_image

三、Python实现膨胀算法

def bin_dialtion(binary, n):
    h, w = gray.shape
    m = int((n - 1) / 2)
    dialtion_image = np.zeros((h, w))
    for i in range(m, h - m):
        for j in range(m, w - m):
           dialtion_image[i, j] = binary[i - 1, j - 1] | binary[i - 1, j] | binary[i - 1, j + 1] |\
                                 binary[i, j - 1] | binary[i, j] | binary[i, j + 1] | binary[i + 1, j - 1] |\
                                 binary[i + 1, j] | binary[i + 1, j + 1]
    return dialtion_image

四、Python实现阈值算法

  阈值算法介于膨胀腐蚀之间,可以调整膨胀腐蚀的程度。

def threshold_method(binary, n, value):
    h, w = gray.shape
    m = int((n - 1) / 2)
    th_image = np.zeros((h, w))
    for i in range(m, h - m):
        for j in range(m, w - m):
           temp = binary[i - 1, j - 1] + binary[i - 1, j] + binary[i - 1, j + 1] +\
                                 binary[i, j - 1] + binary[i, j] + binary[i, j + 1] + binary[i + 1, j - 1] +\
                                 binary[i + 1, j] + binary[i + 1, j + 1]
           if temp >= value:
               th_image[i, j] = 1
           else:
               th_image[i, j] = 0
    return th_image
erosion_image = bin_erosion(bin_image, 3)
dialtion_image = bin_dialtion(bin_image, 3)
th_image = threshold_method(bin_image, 3, 8)
fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(2, 2, 1)
ax.set_title("bin image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(bin_image, cmap="gray")
ax = fig.add_subplot(2, 2, 2)
ax.set_title("erosion image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(erosion_image, cmap="gray")
ax = fig.add_subplot(2, 2, 3)
ax.set_title("dialtion image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(dialtion_image, cmap="gray")
ax = fig.add_subplot(2, 2, 4)
ax.set_title("threshold image")
ax.set_xlabel("width")
ax.set_ylabel("height")
plt.imshow(th_image, cmap="gray")

  画图结果如下。
Python与FPGA——膨胀腐蚀,Python与FPGA,python,fpga开发,开发语言


五、FPGA实现腐蚀算法

module  ycbcr_to_erosion
(
	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]	erosion_data	//二值化像素
);
//binary data
wire [7: 0] 	bin_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  bin_data  = (y_data >= 8'd128) ? 8'd255: 8'd0;
assign  data_row3 = bin_data  ;
//腐蚀
assign  temp = (p11 & p12 & p13 & p21 & p22 & p23 & p31 & p32 & p33);
//像素拼接565
assign  erosion_data = {temp[7:3], temp[7:2], temp[7:3]};
always@(posedge vga_clk or negedge sys_rst_n)	
	if(sys_rst_n == 1'b0)
		y_valid  <=  1'b0  ;
	else
		y_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  ;
		end
	else  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	
	else
		begin
			{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

Python与FPGA——膨胀腐蚀,Python与FPGA,python,fpga开发,开发语言
  FPGA实现中,只讲解腐蚀算法,膨胀算法及阈值算法,感兴趣的小伙伴可以自行实现,非常easy。

总结

  膨胀腐蚀算法图像处理中常用的算法,有必要掌握。虽然简单,还是需要自己去实现,写多了,也就顺了。下期帧差法。帧差法只做Python,不做FPGA,为什么?下期揭晓答案。文章来源地址https://www.toymoban.com/news/detail-837417.html

到了这里,关于Python与FPGA——膨胀腐蚀的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理基础:图像膨胀、腐蚀、开闭运算及梯度运算的Python实现

    目录 一、为什么要进行图像处理? 二、图像形态学的四种基本操作 1、图像膨胀 1.1、基本概念 1.2、膨胀函数代码展示 2、图像腐蚀 2.1、基本概念 2.2、腐蚀函数代码展示 3、图像开运算 3.1、基本概念 3.2、开运算函数代码展示 4、图像闭运算 4.1、基本概念 4.2、闭运算函数代码

    2024年02月04日
    浏览(47)
  • 【Python】【Opencv】形态学操作cv2.morphologyEx()函数详解和示例,实现腐蚀、膨胀、闭和开等运算

    常用的形态学操作如腐蚀、膨胀、开运算、闭运算等,可以帮助我们解决一下图像不连接或消除图像中某些不想要的连接,对于图像处理使用方便,效果明显。本文通过示例对这些功能和效果进行演示,以帮助大家理解和使用。 cv2.morphologyEx 是 OpenCV 中的一个函数,用于执行

    2024年02月22日
    浏览(71)
  • opencv膨胀腐蚀

      OpenCV 是一个开源的计算机视觉库,它包含了许多图像处理的功能,其中膨胀和腐蚀是两种常用的形态学操作。 膨胀(Dilation):膨胀操作是将图像中的高亮区域(白色像素)扩张,从而填充低亮区域(黑色像素)。这可以用于消除图像中的噪声,连接相邻的物体等。在 

    2024年02月06日
    浏览(49)
  • Opencv基础操作-腐蚀操作-膨胀操作

    腐蚀操作原理(使价值信息越来越少) 初始化一个核(初始化大小和尺寸),类似于一个滑动窗口,在目标图像上面进行遍历,若这个窗口内图像的像素都大于或者都小于窗口元素(都为前景或者背景)则不进行操作,若不同,则将窗口内对应的图像像素进行腐蚀操作( 将

    2024年02月03日
    浏览(44)
  • OpenCV 入门教程:膨胀和腐蚀操作

    膨胀和腐蚀是图像处理中常用的形态学操作,用于改变图像的形状和结构。在 OpenCV 中,膨胀和腐蚀是基于结构元素的像素操作,可以用于图像增强、边缘检测、图像分割等多个领域。本文将以膨胀和腐蚀操作为中心,为你介绍使用 OpenCV 进行形态学操作的基本步骤和实例。

    2024年02月13日
    浏览(44)
  • opencv 图像腐蚀膨胀 erode dilate

    2024年02月16日
    浏览(52)
  • 使用 OpenCV 进行图像操作:腐蚀、膨胀等等

    形态变换是根据形状变换图像的图像处理方法。这一过程有助于区域形状的表征和描绘。这些变换使用应用于输入图像的结构元素,并生成输出图像。形态学操作有多种用途,包括去除图像中的噪声、定位图像中的强度凹凸和孔洞以及连接图像中的不同元素。形态转变有两种

    2024年02月09日
    浏览(44)
  • getStructuringElement函数以及开、闭、腐蚀、膨胀原理讲解

    cv2.getStructuringElement()函数的作用是返回一个结构元素(卷积核),具体解析如下: a取不同的参数会导致卷积核有不同的形状,a参数有三个: ①:MORPH_RECT(函数返回矩形卷积核) ②:MORPH_CROSS(函数返回十字形卷积核) ③:MORPH_ELLIPSE(函数返回椭圆形卷积核) b:用一个(x,y)的

    2024年01月16日
    浏览(35)
  • 【OpenCv • c++】形态学技术操作 —— 腐蚀与膨胀

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月04日
    浏览(54)
  • 基于FPGA的图像形态学膨胀算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 在FPGA中仿真结果如下所示: 将FPGA中的仿真结果导入到matlab显示二维图,效果如下: matlab2022a vivado2019.2        膨胀操作是形态学中另外一种基本的操作。膨胀操作和腐蚀操

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包