内容简介:离研究生毕业只有六个月了,毕业设计也该动手了。去年开题,选择了《基于图像处理的客观题自动阅卷系统的设计与实现》这个题目。今年中期,考虑了很久,最终还是没有换题目。想要做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()
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。