伪知识之通俗易懂得解释图像识别常用技巧持续更新:【内向即废物--沈吟秋】

纯属个人见解,内容并不是完全靠谱,仅供参考

一:什么是向量空间:

三维向量就是基于空间直角坐标系的空间向量,即x,y,z)形式的。

二维向量就是基于二维平面直角坐标系的向量,即x,y)形的。

这里的(x,y,z) 或则(x,y)就是向量空间

 

二:查看一维矩阵的元素,大小,维数:
one_vector=np.array(range(12))
print(one_vector)

Res:

[ 0  1  2  3  4  5  6  7  8  9 10 11]

print(one_vector.size)

Res:

12

print(one_vector.shape)

Res:

(12,)

print(one_vector.ndim)

Res:

1

 

三:查看二维矩阵的元素,大小,维数

two_array=np.array(range(12)).reshape(3,4)
print(two_array)
print(two_array.size)
print(two_array.ndim)

Res:

[[ 0  1  2  3]

 [ 4  5  6  7]

 [ 8  9 10 11]]

12

2

 

四:查看三维矩阵的元素,大小,维数

three_array=np.array(range(12)).reshape(2,3,2)
print(three_array)
print(three_array.size)
print(three_array.ndim)

Res:

[[[ 0  1]

  [ 2  3]

  [ 4  5]]

 

 [[ 6  7]

  [ 8  9]

  [10 11]]]

12

3

 

 

五:从编程思想解释彩色图像的产生:

 【图一】

jpg_path='010~67766316.png'
im=Image.open(jpg_path)
im_mat = scipy.misc.fromimage(im)

print(im_mat)

Res:

[[[255 255 255 ..., 255 255 255]

  [255 255 255 ..., 255 255 255]

  [255 255 255 ..., 255 255 255]

  [255 255 255 ..., 255 255 255]

  [255 255 255 ..., 255 255 255]

  [255 255 255 ..., 255 255 255]]]

从中可以看出彩色图像是由*列*三个亮度分量所组成的一个三维矩阵

print(im.size) 获取图片的像素点

Res:(120, 16)

此时发现图的行由120个像素点组成,列有16个像素点组成。在彩色图像中每个像素点包含三个亮度分量。

以上就是彩色图像组成的方式。

六:RGB颜色通道:

一个彩色像素点由RGB三个通道组成,每个通道里面存储着一个亮度分量。

 

该图中红色的方框就是通道,通道里面的100就是亮度分量,R+G+B三个分量的叠加组成了如上这个颜色。该颜色就是一个像素点。

七:图像通道:

RGB颜色通道,CMYK颜色通道,灰度颜色通道等统称为图像通道

八:图像灰度化:

图像灰度化,就是让一个彩色像素点的RGB颜色通道中分量的值相等。

使彩色图像转化成灰色图像

jpg_path='010~67766316.png'
im=Image.open(jpg_path)

grayscale=im.convert('L')
grayscale.show()

 

九:图像灰度化的运算方法

使一个彩色像素点变成灰度像素点的方法:       

灰度R=彩色R*0.3+彩色G*0.59+彩色B*0.11

灰度G=彩色R*0.3+彩色G*0.59+彩色B*0.11

灰度B=彩色R*0.3+彩色G*0.59+彩色B*0.11

一个彩色像素点为(225,48,32)

一个灰度像素点(99.34,99.34,99.34)

 

彩色像素点(70,200,177)----灰度像素点(158,158,158)


【图一】      

 

 【图二】

【图一】是三个分量都是150所叠加的灰色像素点,显示出来的灰色亮度

【图二】是三个分量都是70所叠加的灰色像素点,显示出来的灰色亮度

一旦RGB分量相等时,就会进入0-225的一个白到黑的亮度范围,二者里面0是黑225是白,其余都可以认为是不同亮度级别的灰色。通过得到的灰度像素点,来判断图像的深或浅。

10:获取灰度化图像的所有像素的颜色分量:

jpg_path='010~67766316.png'
im=Image.open(jpg_path)
print(im.size)
grayscale=im.convert('L')
np.set_printoptions(threshold=np.NaN)
im_mat = scipy.misc.fromimage(im)

Res:

[[255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255]

 ... 

 [255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255

  255 255 255 255 255 255 255 255 255 255 255 255]]

 

11:获取灰度化图像的阈值:

fromPILimportImage
import numpyasnp
from scipy.miscimportimread, imresize, imsave

fromskimageimportdata,filters

jpg_path='010~67766316.png'
im=Image.open(jpg_path)
grayscale=im.convert('L')
np.set_printoptions(threshold=np.NaN)
im_mat = scipy.misc.fromimage(grayscale)
thresh = filters.threshold_otsu(im_mat)
print(thresh)

183

返回灰度化图像的颜色分量阈值

 

 

12:通过阈值来获取图像的二值化

jpg_path='010~67766316.png'
im=Image.open(jpg_path)
grayscale=im.convert('L')
table=[]
for iinrange(256):
    ifi <183:   这里的183就是阈值
        table.append(0)
    else:
        table.append(1)
bim=grayscale.point(table,'1')

此时返回的就是二值化的图像

 

13:垂直投影数组:

以上的操作终其目的是为了分割图像,于是乎就要引入垂直投影数组的概念来分割图像

垂直投影数组就是获取每行每列的像素点,然后一旦这一行一列中的像素点是0的话,记录该行

直到在某一行的某一列的所有像素点都是225的时候就可以认为是离开了这个字。

最后拿第一次记录到的像素点0的行和最后一次没有像素点的行的前一个作为该字的第一个像素距离和最后一个像素距离,就能获得该字在图像中的位置。

 

14:分割图像:

一旦获得了该图像的垂直投影数组就可以进行分割图像:

 

images = [
        image.crop((x_start, 0, x_end, height))
        for x_start, x_end in split_points]

 

15:保持大小一致

由于分割完以后大小不均等,所以为了后续处理的方便

通过resize来让图像的尺寸保持一致。
    images = [image.resize((9, 16)) for image in images]

保持尺寸一致

 

 



猜你喜欢

转载自blog.csdn.net/qq_37995231/article/details/79123887