精华内容
下载资源
问答
  • Python提取数字图片特征向量

    万次阅读 多人点赞 2017-11-10 15:40:56
    在机器学习中有一种学习叫做手写数字识别,其主要功能就是让机器识别出图片中的数字,其步骤主要包括:图片特征提取、将特征值点阵转化为特征向量、进行模型训练。第一步便是提取图片中的特征提取。数据的预处理关系...

    引言

    在机器学习中有一种学习叫做手写数字识别,其主要功能就是让机器识别出图片中的数字,其步骤主要包括:图片特征提取、将特征值点阵转化为特征向量、进行模型训练。第一步便是提取图片中的特征提取。数据的预处理关系着后面模型的构建情况,所以,数据的处理也是机器学习中非常重要的一部分。下面我就说一下如何提取图片中的特征向量。

    图片灰度化

    blob.png =>blob.png

    当我们拿到一种图片的时候,这张图片可能是多种颜色集合在一起的,而我们为了方便处理这张图片,我们首先会将这张图片灰度化(左图灰度化之前,右图灰度化之后)。如果该图片已经是黑白两色的就可以省略此步骤。

    from PIL import Image
    import numpy as np
    
    #打开一张图片
    img = Image.open("image/77.jpg")
    #图片灰度化
    img = img.convert("L")
    #显示图片
    img.show()
    #将图片转换为数组形式,元素为其像素的亮度值
    print np.asarray(img)

    在图片灰度化之前这张图片的数组值应该是一个三维的,灰度化之后将变为二维数组。数组行列数就是图片的像素宽度和高度。

    打印的数组形式如下:

    blob.png

    图片的二值化

    图片的二值化就是将上面的数组化为0和1的形式,转化之前我们要设定一个阈值,大于这个阈值的像素点我们将其设置为1,小于这个阈值的像素点我们将其设置为0。下面我找了一张数字的图片,这张图片已经灰度化过了。我们就直接将它二值化。图片如下:

    blob.png

    图片的像素是32x32的。如果不是要化为此值,这一步我们叫做尺寸归一化。

    #打开一张图片
    img = Image.open("numImage/3.jpg")
    #将图片化为32*21的
    img = img.resize((32, 32))
    #二值化
    img = img.point(lambda x:1 if x > 120 else 0) 
    #将图片转换为数组形式,元素为其像素的亮度值
    img_array = np.asarray(img)
    print img_array

    解释一下上面的代码,resize方法里的参数是一个元组,元素分别是宽和高;point函数是用来二值化图片的,其参数是一个lambda函数,函数体就是判断其元素值是否大于120,这里的120就是上面提到的阈值。

    二值化后的数组:

    blob.png

    在数组中我们可以大似的看到,数字1大似组成了一个3的形状。

    获取网格特征数字统计图

    在图片二值化之后,我们通常需要获取到网格统计图,这里我们的图片尺寸是32*32的,所以我们将其化为8*8的点阵图,步骤如下:

    1、将二值化后的点阵水平平均划线分成8份,竖直平均划线分成8份。

    2、分别统计每一份中像素点为1的个数。

    3、将每一个份统计值组合在一起,构成8*8的点阵统计图。

    下面我写了个函数来将32*32的数组转化成8*8的网格特征数字统计图:

     
    #将二值化后的数组转化成网格特征统计图 def get_features ( array ):     #拿到数组的高度和宽度     h , w  =  array. shape     data  =  [ ]     for x  in  range ( 0 , w/ 4 ):         offset_y  = x *  4         temp  =  [ ]         for y  in  range ( 0 ,h/ 4 ):             offset_x  = y *  4             #统计每个区域的1的值             temp. append ( sum ( sum ( array [ 0+offset_y: 4+offset_y , 0+offset_x: 4+offset_x ] ) ) )         data. append (temp )     return np. asarray (data )

    转化之后我们的到的数组点阵是这样的:

    blob.png

    将二维的统计图转化为一维的特征向量

    这一步就比较简单了,只需要将矩阵全部放到一行即可,直接使用np的reshape()方法即可:

    features_vector =features_array.reshape(features_array.shape[0]*features_array.shape[1])
    print features_vector

    输出结果:

    blob.png

    有些同学可能要问,为什么要将二维的点阵转化成一维的特征向量? 这是因为在机器学习中,数据集的格式就是这样的,数据集的一个样例就是一个特征向量,对个样例组成一个训练集。转化为以为的特征向量是便于我们的使用。

    全部代码(省略灰度化):

    from PIL import Image
    
    import numpy as np
    
    
    
    #将二值化后的数组转化成网格特征统计图
    
    def get_features(array):
        #拿到数组的高度和宽度
        h, w = array.shape
        data = []
        for x in range(0, w/4):
            offset_y = x * 4
            temp = []
            for y in range(0,h/4):
                offset_x = y * 4
                #统计每个区域的1的值
                temp.append(sum(sum(array[0+offset_y:4+offset_y,0+offset_x:4+offset_x])))
            data.append(temp)
        return np.asarray(data)
    
        
    
    #打开一张图片
    img = Image.open("numImage/3.jpg")
    #将图片化为32*32的
    img = img.resize((32, 32))
    
    
    #二值化
    img = img.point(lambda x:1 if x > 120 else 0)
    #将图片转换为数组形式,元素为其像素的亮度值
    img_array = np.asarray(img)
    print img_array
    #得到网格特征统计图
    features_array = get_features(img_array)
    print features_array
    features_vector =features_array.reshape(features_array.shape[0]*features_array.shape[1])
    print features_vector

    原文:http://www.k2zone.cn/?p=977

    展开全文
  • 提取任何图像的特征向量,并找到余弦相似度以使用Pytorch进行比较。 我已经使用ResNet-18提取图像的特征向量。 最后,开发了一个Django应用程序来输入两个图像并找到余弦相似度。 包装方式: 火炬 Django 2.0 学分...
  • 提取图像SIFT特征向量

    2014-09-09 19:38:19
    本代码用opencv实现提取图像SIFT特征向量
  • 给定一批图像,该程序将尝试使用基于Resnet50的特征向量提取来找到图像之间的相似性。 用法 python kreas_resnet50.py会将images文件夹中存在的所有图像python kreas_resnet50.py比较,并为每个图像提供最相似的图像...
  • java求矩阵的特征值和特征向量

    热门讨论 2012-05-25 11:18:29
    这几天做一个项目,需要用到 求矩阵的特征值特征向量。我c++学的不好,所以就去网站找了很多java的源代码,来实现这个功能。很多都不完善,甚至是不准确。所以自己参考写了一个。这个用于我一个朋友的毕业设计。结果...
  • 深度学习提取特征向量

    千次阅读 2020-03-19 01:10:28
    深度学习的特征向量可以用于图片检索,比较其特征向量相似的图片即是同类图片,提取神经网络中最后一层全连接层的特征向量的话只需要将分类层删掉即可,最后的输出即是该图片特征向量。前提是有一个已经在自己的...

    深度学习的特征向量可以用于图片检索,比较其特征向量相似的图片即是同类图片,提取神经网络中最后一层全连接层的特征向量的话只需要将分类层删掉即可,最后的输出即是该图片的特征向量。前提是有一个已经在自己的数据集上训练好的参数。
    在测试开始之前加入:
    y = network.outputs
    在epoch时加入:
    img_code=sess.run(y, feed_dict={x: X_test_a, y_: y_test_a})

    展开全文
  • AquilaDB:用于存储特征向量和JSON元数据的向量数据库,可进行近似最近邻搜索,适合机器学习工程师和数据科学家
  • MSER+SIFT 图像的特征向量提取 python

    千次阅读 热门讨论 2018-07-24 11:54:48
    在做图像检索时,需要提取图像的特征向量。传统的局部特征描述子如SIFT、SURF等,如果不做别的处理,往往会得到大量的特征向量,虽然特征向量的数目越多,对图像的描述越精确,检索的准确率较高,但是这也会增加硬件...

    在做图像检索时,需要提取图像的特征向量。传统的局部特征描述子如SIFT、SURF等,如果不做别的处理,往往会得到大量的特征向量,虽然特征向量的数目越多,对图像的描述越精确,检索的准确率较高,但是这也会增加硬件成本同时也会耗费大量的计算时间。

    从博主的试验结果来看,单张图384×256大小,提取出的SIFT平均有200个,如果直接和库中的数据进行相似度计算,大概要1分钟的时间。对于时间要求很高的产业,这是不能接受的。所以,在不进行压缩图像损失信息的前提下,大大减少SIFT的数目是很有必要,也是很有价值的。

    在查阅了大量的资料后,博主发现在做keypoint的compute之前,用MSER 检测出的keypoint代替SIFT检测出的keypoint,可以大大减少SIFT 的数目。对MSER 有疑问的,可以在找几篇相关的博客看一看,不是很复杂。

    简单的说一下MSER(最大稳定值检测),基于分水岭的概念,对图像进行二值化,阈值范围[0,255],然后不断变化阈值,变化量可以自己设置,二值图像就会经历一个从全黑0到全白255的过程,就像水位不断上升时陆地和海平面的俯瞰图。在这个过程中,有些连通区域面积随着阈值的变化量很小或基本不变,这些区域就叫MSER 。关于MSER的算法细节和具体实现就不在这说了,有兴趣的可以自己研究一下。

    当用MSER检测出keypoint之后,就可以利用SIFT的方式计算这些keypoint的描述子了。

    import cv2
    import numpy as np
    import skimage.io as io
    import matplotlib.pyplot as plt
    filename="/home/mysj/文档/testpicture"
    str=filename+"/*.jpg"
    mat=io.ImageCollection(str)
    img=mat[0]
    ##创建一个MSER检测器,并检测图像的MSER区域
    ##kpkp保存检测到的keypoint
    mser=cv2.MSER_create()
    regions,boxes=mser.detectRegions(img)
    kpkp=mser.detect(img)
    print len(mser.detect(img))
    ##用红框框出检测到的MSER区域,boxes保存这些区域的左上角的坐标和区域的宽和高
    for i in range(len(boxes)):
        x,y,w,h=boxes[i]
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    #创建一个SIFT特征提取器
    siftt=cv2.xfeatures2d.SIFT_create()
    
    print len(regions)
    print len(boxes)
    kp=siftt.detect(img,None)
    ##计算kpkp的局部描述子
    des=siftt.compute(img,kpkp)
    print len(des[0])
    ##在图像上画出这些keypoint
    cv2.drawKeypoints(img,kpkp,mat[0])
    plt.imshow(mat[0])    

    SIFT-SIFT方式提取的特征点有243个,MSER-SIFT提取的特征点有57个,虽然精度会有些下降,但是带来的时间上的提升是很客观的。时间缩短为原来的1/4,相当于原来跑一张的时间现在可以跑4张图。红框是MSER区域。

                                           图一 SIFT-SIFT

     

                                        图二 MSER-SIFT

     

    展开全文
  • 数据可视化: PCA显示特征向量

    千次阅读 2018-10-16 10:53:18
    import os,cv2 import numpy as np from sklearn.decomposition import IncrementalPCA input_folder = 'images/' H,W = 72,72 comp_num = 5 X = [] for name in os.listdir(input_... path = os.path.jo...
    import os,cv2
    import numpy as np
    from sklearn.decomposition import IncrementalPCA
    
    input_folder = 'images/'
    H,W = 72,72
    comp_num = 5
    
    X = []
    for name in os.listdir(input_folder):
        path = os.path.join(input_folder, name)
        img = cv2.imread(path,0)
        X.append(np.reshape(img,(1,-1)))
    X = np.vstack(X)
    print X.shape
    
    transformer = IncrementalPCA(n_components=comp_num * comp_num)
    transformer.partial_fit(X)
    
    print 'pc shape:',transformer.components_.shape
    
    vis = np.zeros( (comp_num * H, comp_num * W)  )
    for y in range(comp_num):
        for x in range(comp_num):
            x0,y0 = x * W, y * H
            pos = y * comp_num + x
            data = np.reshape(transformer.components_[pos,:],H*W) * transformer.var_ + transformer.mean_
            vis[y0:y0+H, x0:x0+W] = np.reshape(data,(H,W))
    
    print vis.min(), vis.max()
    vis = np.uint8(vis)
    cv2.imwrite("pc.bmp",vis)
    
    
    
    展开全文
  • Pytorch提取模型特征向量保存至csv

    千次阅读 2019-05-29 21:28:19
    Pytorch提取模型特征向量 # -*- coding: utf-8 -*- """ dj """ import torch import torch.nn as nn import os from torchvision import models, transforms from torch.autograd import Variable import numpy ...
  • #得到存放所有图片特征值的 ndarray :Final_feature pre_feature_ndarray=np.random.randn(1,2048) for subimg in imglist: input_image=caffe.io.load_image(subimg) prediction=net.predict([input_image]) ...
  • 最近因为课题需要,使用欧式距离来计算多个特征向量间的距离。开始的想法是使用循环来解决,发现计算复杂度高,时间长 在博客中看到作者GoHowz 和其引用frankzd博客,通过矩阵的方法来代替之前循环计算方法,速度...
  • 1.提取单张图片特征向量 import os.path import torch import torch.nn as nn from torchvision import models, transforms from torch.autograd import Variable import numpy as np from PIL import Image ...
  • 特征值分解:特征值,特征向量特征向量矩阵

    千次阅读 多人点赞 2019-01-19 09:57:26
    特征值和特征向量 特征向量矩阵 特征向量矩阵S,由矩阵A的所有线性无关的特征向量按列排列组成的矩阵。 特征值矩阵,有矩阵A的所有特征值放在对角线位置组成的对角矩阵。 特征值分解的物理意义 矩阵的...
  • OpenCV匹配图像的特征向量

    千次阅读 2014-12-28 22:36:51
    在下面的程序中: ...使用 DescriptorExtractor 接口来寻找关键点对应的特征向量. 特别地: 使用 SurfDescriptorExtractor 以及它的函数 compute 来完成特定的计算.将之前的vector变量变成向量矩阵形式保
  • 如何理解矩阵的特征向量和特征值?

    千次阅读 多人点赞 2019-03-21 12:04:00
    矩阵是一个非常抽象的数学概念,很多同学都对其望而生畏。...本文主要讲的是特征向量(Eigenvector)和特征值(Eigenvalue)。 01 特征向量(Eigenvector)是什么? 基向量 我们一般研究数学,都是在直角...
  • 特征值和特征向量的作用

    千次阅读 多人点赞 2019-03-04 21:13:44
    本文转自知乎大牛。 从定义出发,Ax=cx:A为矩阵,c为特征值,x为特征向量。 矩阵A乘以x表示,对向量x进行一次转换(旋转或拉伸)(是一种线性转换),而该转换的效果为常数c乘以向量x(即只进行拉伸)。 ...
  • # 将每一张图片转为的像素矩阵作为数据传入到tensor中做前向计算,得到2048的特征向量 for j in batch_img_data : j_vector = sess . run ( tensor , feed_dict = { 'DecodeJpeg/contents:0' : j } ) #...
  • 现在手头没数据集,用之前的几张图片测试了一下。 data 数组前两个是同一种树叶: 后两个向量是同一种树叶: 没数据集了,用的差不多的一种树叶对比的,就是上面double x[]的特征: 虽然看面积就知道和第一个...
  • OpenCV入门 - 提取SIFT特征向量

    千次阅读 2015-05-11 18:40:54
    OpenCV入门 - 提取SIFT特征向量  为了确保旋转不变性,会以关键点为中心,以关键点的方向建立坐标轴,不是单独考察单一的这个关键点,而是需要一个邻域。邻域中每个小格的方向代表该像素的梯度方向,长度...
  • 特征值与特征向量是线性代数中一个很基础的知识,但是很多人对这两个概念没有一个直观的概念,从直觉上,很难理解这两个东西,只知道公式,但是不知道它代表的意义。当年上现代课的时候,老师根本不会去讲这些东西,...
  • 这是一个使用特征向量旋转图片的小程序。 您可以在您的应用程序中使用它。
  • 特征值和特征向量

    千次阅读 2019-07-07 18:03:25
    1.定义 :n阶矩阵 :常数 :非零列向量 2.求解 ...是否存在非零解,转换成我们常见的问题,只需要看 的秩是否小于 n 即可,也就是是否存在 使得为零 ... 还有一个特征向量,这个特征向量在 的作用下,...
  • 图片的分类主要包含以下四个步骤:1.用尺度不变特征转换(SIFT...4. 用支持向量机(SVM)训练一个多类分类器,将每张图片的词汇表作为特征向量。对于未知类别的图片,计算它的词汇表,使用训练的SVM分类器进行分类。
  • 特征向量和特征值的物理意义

    千次阅读 2018-08-27 18:04:39
    从定义出发,Ax=cx:A为矩阵,c为特征值,x为特征向量。 矩阵A乘以x表示,对向量x进行一次转换(旋转或拉伸)(是一种线性转换),而该转换的效果为常数c乘以向量x(即只进行拉伸)。 我们通常求特征值和特征向量...
  • 图像像素特征向量As the basis of nearly every image format worth using, Pixels and Vectors are the broad categories of modern 2D image files. But what are they exactly, and how are they different? 作为...
  • 之前看论文,经常看到特征向量的概念,之前一直没搞明白。 其实之所以会不明白,是因为和数学的特征向量的概念混淆了。 从二维的图片上来看,特征图就是卷积和池化层以后的,就是提取出来的。同样可以对比来看,一维...
  • 图像转化为特征向量作用

    千次阅读 2020-04-17 01:50:23
    在使用Inception-v3模型进行二分类模型时,想不通为何要将图像转为图像的特征向量文件。 二维中的向量,代表平面上的一个线段,当然有方向有大小,在三维中同理,只不过 一个向量所代表的意义扩展了。 首先 我认为...
  • 文章目录一:特征值与特征向量二:特征方程2.1行列式求解的另一种方法--初等变换2.2可逆矩阵定理以及行列式性质的补充2.3特征方程![在这里插入图片描述]...
  • 题目是将图片库中的纹理图片裁剪成九份,其中五份做训练集,四份做测试集,先提取图片LBP特征 ,最后用svm支持向量机进行学习,在预测测试集里的图片是哪一类纹理。 正常情况下是需要调参的,即调整SVM的参数,但图...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,726
精华内容 27,890
关键字:

图片特征向量