图像二值化

理论

图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。

一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。

常见的二值化方法有三种,分别是固定阈值法、平均值法、自适应阈值法和直方图法。

固定阈值法就是设定一个固定阈值K,小于等于K的像素值设为0(黑色),大于K的像素值设为255(白色)。

平均值法计算像素的平均值K,然后扫描图像的每个像素值,小于等于K像素值设为0(黑色),大于K的像素值设为255(白色)。

自适应阈值法对平均值法进行改进,规定一个区域大小,求区域平均值作为阈值K,然后区域中的像素值与K进行比较。

直方图方法主要是发现图像的两个最高的峰,然后阈值K取值在两个峰之间的峰谷最低处。图像的直方图用来表征该图像像素值的分布情况。用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目。

更多内容参考图像的二值化之python+opencvopencv python图像二值化

图像灰度化

前言

离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做AIOps,但是自己基础薄弱,也没有特定的方向,到了六月份也不一定能完成。保险起见,还是做阅卷系统吧!

阅卷系统主要有五个方面的研究内容,分别是图像预处理、目标检测、图像分割、手写识别和移动Web。其中图像预处理包括试卷图像的灰度化、二值化、去噪、倾斜矫正等;目标检测是为了定位学号和答案的位置,并且提取出这些信息;图像分割是为了分割学号和多选题的字符;手写识别是为了识别手写字符,包括数字和字母;移动Web是为了方便老师随时随地使用系统。

本文,就来研究一下图像的灰度化。

使用Libvirt进行虚拟机在线迁移

前言

《虚拟机在线迁移实验》一文中提到,迁移过程中的downtime不合理,但是没有找到原因。

本文,我们来使用Libvirt进行虚拟机在线迁移,如果downtime在毫秒级,那么说明问题出在OpenStack上。参考An analysis of the performance of live migration in Openstack的评论部分,可以发现有人遇到的同样的问题,downtime远大于1s。作者的猜测是libvirt的设置引起的,也可能是由于迁移后网络适应速度较慢造成的。

Libvirt虚拟机网络配置

前言

通过《使用Libvirt创建虚拟机》一文,我们已经学会使用Libvirt创建虚拟机的方法,而且学会了虚拟机的一些基本配置方法。但是,文中创建的虚拟机只能在node0上访问,node1就无法访问,也就是说无法对外网提供服务。

本文,就来研究一下虚拟机网络配置的方法,使得node1也可以访问到node0中的虚拟机。最简单的实现方法,就是VM要有一个对外提供服务的IP,这个IP不依赖于宿主机,而是和宿主机的IP同级。

使用Libvirt创建虚拟机

libvirt简介

参考QEMU和QEMU-KVM的关系,可以了解到,KVM实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件支持(比如Intel VT,AMD-V),是一种全虚拟化架构。QEMU是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,IO设备,通过一个特殊的“重编译器”对特定的处理器的二进制代码进行翻译,从而具有了跨平台的通用性。

总的来说,QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU。

Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。

Libvirt主要由三个部分组成:API库,一个守护进程libvirtd和一个默认命令行管理工具 virsh。

更多内容参考libvirt 介绍