来源 | 小白学视觉

头图 | 下载于ICphoto

图像分类是数据科学中最热门的领域之一,在本文中,我们将分享一些将图像转换为特征向量的技术,可以在每个分类模型中使用。

VATbox

VATbox,作为n一个我们所暗示的,涉及增值税问题(以及更多)的发票世界的问题之一是,我想知道有多少发票是一个形象?为了简化问题,我们将问一个二元问题,图像中是否有一张发票或同一图像中有多张发票?为什么不使用文本(例如TF-IDF)?为什么只使用图像像素作为输入?因此,有时我们没有可靠的OCR,有时OCR花费了我们金钱,我们不确定我们是否要使用它。.当然,对于本文来说,演示经典方法从图像中提取特征的力量。

import cv2gray_image = cv2.imread(image_path, 0)img = image.load_img(image_path, target_size=(self.IMG_SIZE, self.IMG_SIZE))

缩小图像

想象一下,你们正在密切注视着图像,可以看到附近的像素。因此,如果我们的图像包含文本,则可以看到单词之间和行之间的白色像素。如果我们的意图是(至少在这种情况下)决定图像中是否有一张发票,我们可以从一定距离看图像-这将有助于忽略图像中的“无聊”空白。

# scale parameter – the relative size of the reduced image after the reduction.image_width = int(gray_image.shape[1] * scale_percent)image_height = int(gray_image.shape[0] * scale_percent)dim = (width, height)gray_reduced_image = cv2.resize(gray_image, dim, interpolation=cv2.INTER_NEAREST)cv2.imshow('image', resized)cv2.waitKey(0)

图像的熵

我们可以这样考虑-每个图像的多个发票或单个发票之间的差异可以转换为图像中的信息量,因此,我们可以期望每个类别中的平均熵得分不同。

其中n是灰度级的总和(8位图像为256),p是像素具有灰度级i的概率。

from sklearn.metrics.cluster import entropyentropy1 = entropy(gray_image)entropy2 = entropy(gray_reduced_image)

数据库扫描

Dbscan算法具有在图像空间中查找密集区域并将其分配给一个群集的能力。它的最大优点是它可以自行确定数据中的类数。我们将从dbscan模型创建3个功能:

  1. 类的数量(这里的假设是,类的数量过多将表明图像中的发票数量众多)。

  2. 噪声像素的数量。

  3. 模型中的轮廓分数(轮廓分数衡量每个像素的分类程度,我们将取所有像素的平均轮廓分数)

from sklearn.cluster import DBSCANfrom sklearn import metricsthr, imgage = cv2.threshold(gray_reduced_image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)img_df = pd.DataFrame(img).unstack().reset_index().rename(columns={'level_0': 'y', 'level_1': 'x'})img_df = img_df[img_df[0] == 0]X = image_df[['y', 'x']]db = DBSCAN(eps=1, min_samples=5).fit(X)# plt.scatter(image_df['y'], image_df['x'], c=db.labels_, s=3)# plt.show(block=False)core_samples_mask = np.zeros_like(db.labels_, dtype=bool)core_samples_mask[db.core_sample_indices_] = Truelabels = db.labels_# Number of clusters in labels, ignoring noise if present.n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)n_noise_ = list(labels).count(-1)image_df['class'] = labels# print('Estimated number of clusters: %d' % n_clusters_)# print('Estimated number of noise points: %d' % n_noise_)# print("Silhouette Coefficient: %0.3f" % metrics.silhouette_score(image_df, labels))features = pd.Series([n_clusters_, n_noise_, metrics.silhouette_score(image_df, labels)])

计算零点交叉

我们(灰度)图像中的每个像素的值都在0到255之间(在我们的示例中,零被视为白色,而255被视为黑色)。如果要计算“零”交叉,则需要对图像进行阈值处理—即设置一个值,以使较高的值将分类为255(黑色),而较低的值将分类为0(白色)。在我们的案例中,我使用了Otsu阈值。在执行图像阈值处理之后,我们将获得零和一作为像素,我们可以将其视为数据帧并将每一列和每一行相加:

现在,假设1代表文本区域(黑色像素),0代表空白区域(白色像素)。现在,我们可以计算每行/列总和从任何正数变为零的次数。

img = img / 255df = pd.DataFrame(img)pixels_sum_dim1 = (1 - img_df).sum()pixels_sum_dim2 = (1 - img_df).T.sum()zero_corssings1 = pixels_sum_dim1[pixels_sum_dim1 == 0].reset_index()['index'].rolling(2).apply(np.diff).dropna()zero_corssings1 = zero_corssings1[zero_corssings1 != 1]num_zero1 = zero_corssings1.shape[0]zero_corssings2 = pixels_sum_dim2[pixels_sum_dim2 == 0].reset_index()['index'].rolling(2).apply(np.diff).dropna()zero_corssings2 = zero_corssings2[zero_corssings2 != 1]num_zero2 = zero_corssings2.shape[0]features = pd.Series([num_zero1, num_zero2])

归一化图像直方图

如果我们将图像视为信号,则可以使用信号处理工具箱中的一些工具。我们将使用重新采样的想法来创建更多功能。

怎么做?首先,我们需要将图像从矩阵转换为一维向量。其次,由于每个图像都有不同的形状,因此我们需要为所有图像设置一个重采样大小-在本例中。

使用插值,我们可以将信号表示为一个连续函数,然后我们将对其进行重新采样,采样之间的间隔为

其中x表示图像信号,C表示要重采样的点数。

from scipy.signal import resampledim1_normalized_hist = pd.Series(resample(df.sum(), 16))dim2_normalized_hist = pd.Series(resample(df.T.sum(), 16))print(dim1_normalized_hist)print(dim2_normalized_hist)

DCT-离散余弦变换

离散余弦变换(DCT)用在不同频率振荡的余弦函数之和表示数据点的有限序列。DCT与DFT(离散傅立叶变换)不同,只有实部。DCT,尤其是DCT-II,通常用于信号和图像处理,尤其是用于有损压缩,因为它具有强大的“能量压缩”特性。在典型的应用中,大多数信号信息倾向于集中在DCT的几个低频分量中。我们可以在图像和转置图像上计算DCT向量,并取前k个元素。

from scipy.fftpack import dctdim1_dct = pd.Series(dct(df.sum())[0:8]).to_frame().Tdim2_dct = pd.Series(dct(df.T.sum())[0:8]).to_frame().T
dim1_normalize_dct = pd.Series(normalize(dim1_dct)[0].tolist())dim2_normalize_dct = pd.Series(normalize(dim2_dct)[0].tolist())
print(dim1_normalize_dct)print(dim2_normalize_dct)

结论

如今,CNN的使用正在增长,在本文中,我们试图解释和演示一些以老式方式从图像创建特征的经典方法,了解图像处理的基础是一种很好的做法,因为有时它更容易比将其推入网中更准确。本文是对图像的处理以及如何使用像素并从像素中提取知识的介绍,也许是对大脑的刺激。

不用深度学习,怎么提取图像特征?相关推荐

  1. 深度学习-CNN提取图像特征

    一.卷积层 1.卷积操作 2.特征提取-"X" or "O"? 二.池化(Pooling) 三.Relu 层 四.全连接层(Fully connected la ...

  2. 深度学习在遥感图像目标检测中的应用综述

    深度学习在遥感图像目标检测中的应用综述 1 人工智能发展 1.1 发展历程 1.2 深度学习的应用 2 深度学习 2.1 机器学习概述 2.2 神经网络模型 2.3 深度学习 2.4 深度学习主要模型 ...

  3. 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第2部分

    深度学习:在图像上找到手势 情感手势检测 (Emotion Gesture Detection) Hello everyone! Welcome back to the part-2 of human ...

  4. 深度学习:在图像上找到手势_使用深度学习的人类情绪和手势检测器:第1部分

    深度学习:在图像上找到手势 情感手势检测 (Emotion Gesture Detection) Has anyone ever wondered looking at someone and tri ...

  5. 超分辨率 | 综述!使用深度学习来实现图像超分辨率

    关注公众号"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 今天给大家介绍一篇图像超分辨率邻域的综述,这篇综述总结了图像超分辨率领域的几方面:pr ...

  6. 基于深度学习的文本数据特征提取方法之Word2Vec

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Dipanjan (DJ) Sarkar 编译:ronghuaiyang ...

  7. 解锁AI技能:深度学习利用OCT图像诊断眼内视网膜疾病

    解锁AI技能:深度学习利用OCT图像诊断眼内视网膜疾病 深度学习(Deep learning,DL)是一种新型的AI机器学习技术,它使用一些机器学习技术解决现实世界的问题,通过开发神经网络,模拟人类的 ...

  8. 原来CNN是这样提取图像特征的

    对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...

  9. 原来CNN是这样提取图像特征的。。。

    对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...

  10. 基于可解释人工智能和深度学习的组织病理学图像中的副结核病诊断;用于恶意软件检测的安全稳健的认知系统设计;带有涂鸦注释的弱监督伪装对象检测;Time Majority Voting:一种面向非专家用户的

    可解释的机器学习 中文标题:基于可解释人工智能和深度学习的组织病理学图像中的副结核病诊断 英文标题:Diagnosis of Paratuberculosis in Histopathological ...

最新文章

  1. Linux笔记:使用Vim编辑器
  2. 性能测试工具Lmbench的使用和下载
  3. 2020年中国知识图谱行业分析报告(附全文下载)
  4. Linux之SELinux的基本应用
  5. 【 MATLAB 】信号处理工具箱之fft简介及案例分析
  6. 详解JDBC与Hibernate区别
  7. Web端a标签跳转地图等链接(收藏)
  8. 华硕笔记本节能证书_新标准兼顾性能与续航 笔记本换代哪些型号值得买?
  9. 总结:服务器硬件对性能的影响
  10. 【BIRT】使用rptlibrary设置统一数据源
  11. 查询sql一个字段重复的数据mysql_sql查询按两个字段查询重复记录
  12. fcntl函数之文件锁 F_SETLKW
  13. C# 截取图片的方法
  14. Render errors:One or more layouts are missing the layout_width or layout_height attributes
  15. Linux中Docker的yum源与镜像加速器
  16. 一步步实现koa核心代码
  17. android电话本导入iphone,如何将Android电话簿导入iPhone手机
  18. ZBrush与数位板雕刻模型如何才能结合
  19. python调用gpu amd_TensorFlow通过AMD GPU加速(ROCm/Ubuntu 18.04)
  20. c语言奖学金评定系统课设报告,C语言编程奖学金评定系统太原理工大学.pdf

热门文章

  1. Spring集成Redis方案(spring-data-redis)(基于Jedis的单机模式)(待实践)
  2. 云计算安全解决方案白皮书(一)
  3. 用VS2005打开方案出现“此安装不支持该项目类型”
  4. JSP中的文件操作:数据流、File类、文件浏览、目录操作、上传下载
  5. 类加载过程中几个重点执行顺序整理
  6. 7.Odoo产品分析 (二) – 商业板块(3) –CRM(1)
  7. malloc函数分配失败处理的严重性
  8. String、StringBuilder、StringBuffer的比较
  9. 图形文件元数据管理工具exiv2
  10. 笔记一:python安装和执行