内容简介:离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做AIOps,但是自己基础薄弱,也没有特定的方向,到了六月份也不一定能完成。保险起见,还是做阅卷系统吧!阅卷系统主要有五个方面的研究内容,分别是图像预处理、目标检测、图像分割、手写识别和移动Web。其中图像预处理包括试卷图像的灰度化、二值化、去噪、倾斜矫正等;目标检测是为了定位学号和答案的位置,并且提取出这些信息;图像分割是为了分割学号和多选题
离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做AIOps,但是自己基础薄弱,也没有特定的方向,到了六月份也不一定能完成。保险起见,还是做阅卷系统吧!
阅卷系统主要有五个方面的研究内容,分别是图像预处理、目标检测、图像分割、手写识别和移动Web。其中图像预处理包括试卷图像的灰度化、二值化、去噪、倾斜矫正等;目标检测是为了定位学号和答案的位置,并且提取出这些信息;图像分割是为了分割学号和多选题的字符;手写识别是为了识别手写字符,包括数字和字母;移动Web是为了方便老师随时随地使用系统。
本文,就来研究一下图像的灰度化。
理论
在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有以下四种方法对彩色图像进行灰度化:
1、分量法
将彩色图像中的三分量的亮度作为三个灰度图像的灰度值,可根据应用需要选取一种灰度图像。f1(i,j)=R(i,j) f2(i,j)=G(i,j) f3(i,j)=B(i,j) 其中fk(i,j)(k=1,2,3)为转换后的灰度图像在(i,j)处的灰度值。
2、最大值法
将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。f(i,j)=max(R(i,j),G(i,j),B(i,j))
3、平均值法
将彩色图像中的三分量亮度求平均得到一个灰度图。f(i,j)=(R(i,j)+G(i,j)+B(i,j))/3
4、加权平均法
根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j))
更多内容参考 图像分析 。
实践
算法的实现,主要参考 Python下OpenCV的使用 – 图像灰度化 。
安装opencv
这个毕业设计,打算使用 python 来实现,编辑器使用pycharm。图像处理方面,主要使用opencv。首先安装opencv,很简单,一条命令即可:
pip install opencv-python
如果离线安装的话,不妨参考 使用OpenCV实现实时视频目标检测 。
安装完成后,命令行中输入 python
,进入python shell。输入 import cv2
回车,如果没有报错,说明安装成功。
简单灰度化
在加载图片的时候,直接调用opencv的灰度化方法。
import cv2 image = cv2.imread('image/test.jpg') grayimage = cv2.imread('image/test.jpg',cv2.IMREAD_GRAYSCALE) cv2.imshow('image',image) cv2.imshow('grayimage',grayimage) cv2.waitKey(0)
分量法
import cv2 image = cv2.imread('image/test.jpg') b,g,r = cv2.split(image) # the order is not r,g,b cv2.namedWindow("Image") cv2.imshow("Image",image) cv2.namedWindow("ImageR") cv2.imshow("ImageR",r) cv2.namedWindow("ImageG") cv2.imshow("ImageG",g) cv2.namedWindow("ImageB") cv2.imshow("ImageB",b) cv2.waitKey(0) cv2.destroyAllWindows()
最大值法
import cv2 import numpy image = cv2.imread('image/test.jpg') shape = (image.shape[0],image.shape[1]) newImage = numpy.ndarray(shape,image.dtype) for i in range(image.shape[0]): for j in range(image.shape[1]): newImage[i,j] = max(image[i,j][0],image[i,j][1],image[i,j][2]) cv2.namedWindow("NewImageMax") cv2.imshow("NewImageMax",newImage) cv2.waitKey(0) cv2.destroyAllWindows()
平均值法
import cv2 import numpy image = cv2.imread('image/test.jpg') shape = (image.shape[0],image.shape[1]) newImage = numpy.ndarray(shape,image.dtype) for i in range(image.shape[0]): for j in range(image.shape[1]): newImage[i,j] = (int(image[i,j][0]) + int(image[i,j][1]) + int(image[i,j][2])) / 3 cv2.namedWindow("NewImageAver") cv2.imshow("NewImageAver",newImage) cv2.waitKey(0) cv2.destroyAllWindows()
加权平均法
import cv2 import numpy image = cv2.imread('image/test.jpg') shape = (image.shape[0],image.shape[1]) newImage = numpy.ndarray(shape,image.dtype) for i in range(image.shape[0]): for j in range(image.shape[1]): newImage[i,j] = 0.11 * image[i,j][0] + 0.59 * image[i,j][1] + 0.30 * image[i,j][2] cv2.namedWindow("NewImageWeightAver") cv2.imshow("NewImageWeightAver",newImage) cv2.waitKey(0) cv2.destroyAllWindows()
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ANSI Common Lisp
Paul Graham / Prentice Hall / 1995-11-12 / USD 116.40
For use as a core text supplement in any course covering common LISP such as Artificial Intelligence or Concepts of Programming Languages. Teaching students new and more powerful ways of thinking abo......一起来看看 《ANSI Common Lisp》 这本书的介绍吧!