3702浏览
查看: 3702|回复: 5

[MP动手做] MicroPython动手做(39)——机器视觉之图像基础

[复制链接]
本帖最后由 驴友花雕 于 2020-7-8 21:05 编辑

1、简介
使用MixPY与MixNO开发板硬件以及MixPY软件平台,发挥AI人工智能 K210芯片的算力优势,引入机器视觉概念,从简单的图像基础开始,通过一些MicroPython实际图像处理的小案例,着手学习在LCD屏幕上绘制直线、矩形、圆形和文字等。

MicroPython动手做(39)——机器视觉之图像基础图1

2、知识点
(1)机器视觉(Machine vision)
是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。

机器视觉是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析算法、图像卡、 I/O卡等)。一个典型的机器视觉应用系统包括图像捕捉、光源系统、图像数字化模块、数字图像处理模块、智能判断决策模块和机械控制执行模块。机器视觉系统最基本的特点就是提高生产的灵活性和自动化程度。在一些不适于人工作业的危险工作环境或者人工视觉难以满足要求的场合,常用机器视觉来替代人工视觉。同时,在大批量重复性工业生产过程中,用机器视觉检测方法可以大大提高生产的效率和自动化程度。

MicroPython动手做(39)——机器视觉之图像基础图2

(2)机器视觉技术
是一门涉及人工智能、神经生物学、心理物理学、计算机科学、图像处理、模式识别等诸多领域的交叉学科。机器视觉主要用计算机来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。机器视觉技术最大的特点是速度快、信息量大、功能多。机器视觉主要用计算机来模拟人的视觉功能,但并不仅仅是人眼的简单延伸,更重要的是具有人脑的一部分功能一一从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。

将机器视觉技术应用于禽蛋品质检测具有人工检测所无法比拟的优势。表面缺陷与大小、形状是蛋品品质的重要特征,利用机器视觉进行检测不仅可以排除人的主观因素的干扰,而且还能够对这些指标进行定量描述,避免了因人而异的检测结果,减小了检测分级误差,提高了生产率和分级精度。一个典型的工业机器视觉应用系统,包括数字图像处理技术、机械工程技术、控制技术、光源照明技术、光学成像技术、传感器技术、模拟与数字视频技术、计算机软硬件技术、人机接口技术等。

机器视觉不同于计算机视觉,它涉及图像处理、人工智能和模式识别。机器视觉是专注于集合机械,光学,电子,软件系统,检查自然物体和材料,人工缺陷和生产制造过程的工程,它是为了检测缺陷和提高质量,操作效率,并保障产品和过程安全。它也用于控制机器。机器视觉是将计算机视觉应用于工业自动化。

MicroPython动手做(39)——机器视觉之图像基础图3


(3)图像处理
图像处理是对图像进行分析、加工和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。此外,基于光学理论的模拟图像处理方法依然占有重要的地位。图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。几十年前,图像处理大多数由光学设备在模拟模式下进行。由于这些光学方法本身所具有的并行特性,至今他们仍然在很多应用领域占有核心地位,例如全息摄影。但是由于计算机速度的大幅度提高,这些技术正在迅速的被数字图像处理方法所替代。从通常意义上讲,数字图像处理技术更加普适、可靠和准确。比起模拟方法,它们也更容易实现。专用的硬件被用于数字图像处理,例如,基于流水线的计算机体系结构在这方面取得了巨大的商业成功。今天,硬件解决方案被广泛的用于视频处理系统,但商业化的图像处理任务基本上仍以软件形式实现,运行在通用个人电脑上。


MicroPython动手做(39)——机器视觉之图像基础图4

(4)LCD屏幕绘图

MicroPython动手做(39)——机器视觉之图像基础图5


3、绘制直线

小实验之1  绘制红色直线  

[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#绘制直线

import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
while True:
    lcd.display(image.draw_line([20,120,300,120],248,1))[/mw_shl_code]
实验场景图

MicroPython动手做(39)——机器视觉之图像基础图6

MixPY 实验图形编程


MicroPython动手做(39)——机器视觉之图像基础图7

Image 类_ 图像对象函数( import image )
图像对象是机器视觉操作的基本对象

(1)构造图像对象
[mw_shl_code=python,false]class image.Image(path[,copy_to_fb=False])[/mw_shl_code]
打开一个新的图像对象

参数:
path: 图像对象路径, 比如/sd/MixPY.jpg,支持bmppgmppmjpgjpeg格式的图像文件
copy_to_fb:图像介质
True,图像会直接载入帧缓冲区,可以加载大幅图片了
False,图像会载入MicroPython的堆中,堆远比帧缓冲区小

返回:
返回一个对象, 根据不同格式返回的对象不同

对于JPEG图像而言,“[]”使得您可以访问压缩的节数组形式的JPEG图像色块。由于JPEG图像是压缩的字节流形式,因而对数据组的读取和写入是不透明的。

图像还支持读缓冲区操作。您可以把图像当作节数组对象,将图像输入所有类型的MicroPython函数。若您想传送一个图像,可以将它传递给UART /SPI/ I2C写入函数,可实现自动传送。

(2)绘制直线
[mw_shl_code=python,false].draw_line(x0,y0,x1,y1[,color[,thickness=1]])[/mw_shl_code]
图像上绘制一条从(x0,y0)到(x1,y1)的线

参数:
x0,y0,x1,y1:绘制的直线的起点坐标与终点坐标,可以为单独传递,也可以为元组
color:绘制的直线颜色(默认白色):
RGB56516 位的颜色值,比如0xFFFF
RGB888元组, 比如(236, 36, 36)
GRAYSCALE灰度图素值(0-255)
thickness:控制线的粗细像素

返回:
返回一个图像对象
不支持压缩图像


小实验之2  绘制多条彩色直线

[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#绘制多条彩色直线

import time
import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_line([160,0,160,240],248,5))
time.sleep_ms(1000)
lcd.display(image.draw_line([0,120,320,120],57351,5))
time.sleep_ms(1000)
lcd.display(image.draw_line([0,0,320,240],7936,5))
time.sleep_ms(1000)
lcd.display(image.draw_line([0,240,320,0],57599,5))[/mw_shl_code]

实验场景图

MicroPython动手做(39)——机器视觉之图像基础图8

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图9

4、绘制矩形


绘制矩形函数

[mw_shl_code=python,false].draw_rectangle(x,y,w,h[,color[,thickness=1[,fill=False]]])[/mw_shl_code]

图像上绘制一个矩形


参数:

x,y,w,h:绘制的矩形的起点坐标与长宽参数,可以为单独传递,也可以为元组

color:绘制的矩形颜色(默认白色):

RGB56516 位的颜色值,比如0xFFFF

RGB888元组, 比如(236, 36, 36)

GRAYSCALE灰度图素值(0-255)

thickness:控制矩形的条框线粗细像素

fill:为True以填充矩形


返回:

返回一个图像对象

不支持压缩图像


[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#绘制白线空心矩形

import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_rectangle([30,40,50,80],65535,1,0))[/mw_shl_code]

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图10

实验场景图

MicroPython动手做(39)——机器视觉之图像基础图11

[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#绘制多彩实心矩形

import time
import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_rectangle([30,40,50,80],7936,1,1))
time.sleep_ms(1000)
lcd.display(image.draw_rectangle([130,66,210,145],248,1,1))
time.sleep_ms(1000)
lcd.display(image.draw_rectangle([210,80,70,60],57351,1,1))
time.sleep_ms(1000)
lcd.display(image.draw_rectangle([60,140,110,90],57599,1,1))[/mw_shl_code]

实验场景图

MicroPython动手做(39)——机器视觉之图像基础图12

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图13

5、绘制十字

绘制十字函数
[mw_shl_code=python,false].draw_cross(x,y[,color[,size=5[,thickness=1]]])[/mw_shl_code]
图像上绘制一个十字

参数:
x,y:绘制的十字的中心坐标,可以为单独传递,也可以为元组
color:绘制的圆形颜色(默认白色):
RGB56516 位的颜色值,比如0xFFFF
RGB888元组, 比如(236, 36, 36)
GRAYSCALE灰度图素值(0-255)
size:控制十字的延伸长度像素
thickness:控制十字的条框粗细像素

返回:
返回一个图像对象
不支持压缩图像


[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#屏幕中心绘制白色十字

import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_cross([160,120],65535,30,2))[/mw_shl_code]

实验场景图

MicroPython动手做(39)——机器视觉之图像基础图14

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图15

[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#绘制多彩十字

import time
import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_cross([60,80],57599,30,2))
time.sleep_ms(1000)
lcd.display(image.draw_cross([110,200],57351,30,6))
time.sleep_ms(1000)
lcd.display(image.draw_cross([190,50],248,30,5))
time.sleep_ms(1000)
lcd.display(image.draw_cross([270,150],7936,30,9))[/mw_shl_code]

实验场景图

MicroPython动手做(39)——机器视觉之图像基础图16

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图17

[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#满屏随机绘制绿色十字

import time
import random
import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
mylist = [0,0]
while True:
    mylist[0] = random.randint(1, 319)
    mylist[1] = random.randint(1, 239)
    lcd.display(image.draw_cross(mylist,57351,28,3))
    time.sleep_ms(1000)[/mw_shl_code]

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图18


#MicroPython动手做(39)——机器视觉之图像基础
#满屏随机绘制红绿色十字(实验视频)

https://v.youku.com/v_show/id_XN ... oneSokuUgc_1.dtitle




驴友花雕  中级技神
 楼主|

发表于 2020-7-11 15:52:41

6、综合实验——绘制一节电池


[mw_shl_code=python,false]#MicroPython动手做(39)——机器视觉之图像基础
#综合实验——绘制一节电池

import mixno
import lcd
import image


lcd.init(freq=15000000,color=0)
image = image.Image()
lcd.display(image.draw_rectangle([100,80,170,80],248,3,0))
lcd.display(image.draw_rectangle([80,100,20,40],248,3,0))
lcd.display(image.draw_cross([140,120],57351,10,3))
lcd.display(image.draw_line([215,120,230,120],57351,4))
lcd.display(image.draw_string(120,190,"Battery",65535,5,mono_space=0))[/mw_shl_code]
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-7-11 15:56:32

实验场景效果图

MicroPython动手做(39)——机器视觉之图像基础图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-7-11 16:14:27

MixPY 实验图形编程

MicroPython动手做(39)——机器视觉之图像基础图1
回复

使用道具 举报

gada888  版主

发表于 2020-7-19 09:01:43

支持
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2020-7-19 13:50:21

谢谢斑竹的鼓励
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail