本来可以写两篇不过突然觉得都有点简单所以合在一起了..

目的:一目了然就知道名词代表什么。

灰度图像(grey-scale images)

白话来讲,获取灰度图片的过程就是把图片按照灰度等级的高低改变每个像素值,让图片的保持除了颜色之外的其他特征的过程。

灰度直方图(histogram)

在图像领域中所说的histogram无特殊说明就表示灰度直方图。它能反应出一种统计特征。就是不同灰度的像素的数量。图像编码后每个像素都会得到对应的灰度属性。

CNN灰度图 灰度图 翻译_计算视觉

Canny算子(Canny Method)

通常来说,图形学都用Canny算子得到边缘特征图像。对于算法的细节很多博客写的都很好,所以就不做重复的工作。

展示运行结果:

霍夫变换(Hough Transform)

霍夫变换用来提取图片的特征包括直线,圆等。对于每一条直线可以写成p=sinθ·x+cosθy,如果把x,y看作参数把θ和p看作是变量,画出来还是直线。如果在原表达式上取两个点绘制两条直线,那么交点就蕴含了该信息。也就是把一条值线压缩到了一个点上表示。直观来说,霍夫变换就是把直线或者其他任意的图形换成简单形式表示的一种方法。对应的圆如果写成(x-a)^2+(y-b)^2-p^2=0,那他就是三维空间中的一个点(a,b,p)

都是很简单的工具,但都很实用

代码附带(Python CV2)

import cv2
import numpy as np  
 
img = cv2.imread("/home/sunny/workspace/images/road.jpg", 0)
 
img = cv2.GaussianBlur(img,(3,3),0)
edges = cv2.Canny(img, 50, 150, apertureSize = 3)
lines = cv2.HoughLines(edges,1,np.pi/180,118) #这里对最后一个参数使用了经验型的值
result = img.copy()
for line in lines[0]:
	rho = line[0] #第一个元素是距离rho
	theta= line[1] #第二个元素是角度theta
	print rho
	print theta
	if  (theta < (np.pi/4. )) or (theta > (3.*np.pi/4.0)): #垂直直线
                #该直线与第一行的交点
		pt1 = (int(rho/np.cos(theta)),0)
		#该直线与最后一行的焦点
		pt2 = (int((rho-result.shape[0]*np.sin(theta))/np.cos(theta)),result.shape[0])
		#绘制一条白线
		cv2.line( result, pt1, pt2, (255))
	else: #水平直线
		# 该直线与第一列的交点
		pt1 = (0,int(rho/np.sin(theta)))
		#该直线与最后一列的交点
		pt2 = (result.shape[1], int((rho-result.shape[1]*np.cos(theta))/np.sin(theta)))
		#绘制一条直线
		cv2.line(result, pt1, pt2, (255), 1)
 
cv2.imshow('Canny', edges )
cv2.imshow('Result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()