前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >无需深度学习即可提取图像特征

无需深度学习即可提取图像特征

作者头像
小白学视觉
发布于 2022-05-22 04:53:07
发布于 2022-05-22 04:53:07
40500
代码可运行
举报
运行总次数:0
代码可运行

一、简介

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

二、定义

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
gray_image = cv2.imread(image_path, 0)
img = image.load_img(image_path, target_size=(self.IMG_SIZE, self.IMG_SIZE)

三、缩小图像

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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的概率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.metrics.cluster import entropyentropy1 = entropy(gray_image)
entropy2 = entropy(gray_reduced_image)

五、数据库扫描

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

  1. 类的数量(这里的假设是,类的数量过多将表明图像中的发票数量众多)。
  2. 噪声像素的数量。
  3. 模型中的轮廓分数(轮廓分数衡量每个像素的分类程度,我们将取所有像素的平均轮廓分数)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.cluster import DBSCAN
from sklearn import metrics
thr, 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_] = True
labels = 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代表空白区域(白色像素)。现在,我们可以计算每行/列总和从任何正数变为零的次数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
img = img / 255
df = 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表示要重采样的点数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.signal import resample
dim1_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个元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.fftpack import dct
dim1_dct = pd.Series(dct(df.sum())[0:8]).to_frame().T
dim2_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的使用正在增长,在本文中,我们试图解释和演示一些以老式方式从图像创建特征的经典方法,了解图像处理的基础是一种很好的做法,因为有时它更容易比将其推入网中更准确。本文是对图像的处理以及如何使用像素并从像素中提取知识的介绍,也许是对大脑的刺激。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python图像识别---------图片相似度计算
要识别两张图片是否相似,首先我们可能会区分这两张图是人物照,还是风景照等......对应的风景照是蓝天还是大海......做一系列的分类。
andrew_a
2019/07/30
11.8K0
python图像识别---------图片相似度计算
详解DBSCAN聚类
基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。它可以替代KMeans和层次聚类等流行的聚类算法。
deephub
2020/08/21
1.9K0
详解DBSCAN聚类
Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)「建议收藏」
另外,我整理了整个项目的精简版本,完整代码,开箱即用,教程详细,方便快捷!下载:Pytorch实现基于卷积神经网络的面部表情识别项目源码
全栈程序员站长
2022/08/29
1.4K0
Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)「建议收藏」
【机器学习篇】探索机器学习在农业中的应用:从作物预测到精准农业
农业是人类社会的基础产业,随着科技的飞速发展,机器学习作为人工智能的一个重要分支,正逐渐为农业带来前所未有的变革。从预测作物产量和生长状况,到实现精准的农业资源管理,机器学习的应用为农业生产带来了更高的效率、更低的成本和更可持续的发展模式。
羑悻的小杀马特.
2025/01/23
2470
【机器学习篇】探索机器学习在农业中的应用:从作物预测到精准农业
Python机器学习、深度学习库总结(内含大量示例,建议收藏)
目前,随着人工智能的大热,吸引了诸多行业对于人工智能的关注,同时也迎来了一波又一波的人工智能学习的热潮,虽然人工智能背后的原理并不能通过短短一文给予详细介绍,但是像所有学科一样,我们并不需要从头开始”造轮子“,可以通过使用丰富的人工智能框架来快速构建人工智能模型,从而入门人工智能的潮流。人工智能指的是一系列使机器能够像人类一样处理信息的技术;机器学习是利用计算机编程从历史数据中学习,对新数据进行预测的过程;神经网络是基于生物大脑结构和特征的机器学习的计算机模型;深度学习是机器学习的一个子集,它处理大量的非结构化数据,如人类的语音、文本和图像。因此,这些概念在层次上是相互依存的,人工智能是最广泛的术语,而深度学习是最具体的:
润森
2022/09/22
3.1K0
Python机器学习、深度学习库总结(内含大量示例,建议收藏)
机器学习之鸢尾花-聚类
将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。
python与大数据分析
2022/03/11
7370
机器学习之鸢尾花-聚类
使用OpenCV实现图像增强
首先我们获取了一个LPG气瓶图像,该图像取自在传送带上运行的仓库。我们的目标是找出LPG气瓶的批号,以便更新已检测的LPG气瓶数量。
小白学视觉
2020/08/10
1.7K0
检测图像中的圣诞树,不用深度学习,好家伙,还可以怎么搞!
本篇文章将用 Python 来实现图片中的圣诞树的识别、标记,可理解为计算机视觉中的物体检测,先声明一下哈这里没有用到神经网络,都是传统方法
AI算法与图像处理
2021/01/20
5990
检测图像中的圣诞树,不用深度学习,好家伙,还可以怎么搞!
Hog图像特征提取算法,HOG
HOG全称:方向梯度直方图(Histogram of Oriented Gradient),发表于2005年的CVPR,是一种图像特征提取算法,和SVM分类器结合应用于行人检测领域。HOG通过计算图像中每个像素的梯度的大小和方向,来获取图像的梯度特征,是一种特征描述子。
云深无际
2020/08/12
4.9K0
nvidia-rapids︱cuML机器学习加速库
cuML是一套用于实现与其他RAPIDS项目共享兼容API的机器学习算法和数学原语函数。
悟乙己
2020/03/27
3.7K0
图像相似程度
算法:图像相似程度是通过图像直方图、汉明距离、平均哈希法、感知哈希法等来计算相似程度。
裴来凡
2022/05/29
9000
图像相似程度
【从零学习OpenCV 4】直方图归一化
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/13
1.6K0
Image Representation & Classification(图像表示与分类)
RGB channels Visualize the levels of each color channel. Pay close attention to the traffic signs!
小飞侠xp
2018/08/27
5380
OpenCV实战:从图像处理到深度学习的全面指南
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列的C函数和少量C++类构成,同时提供Python、Java和MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
TechLead
2023/10/21
9550
OpenCV实战:从图像处理到深度学习的全面指南
计算机视觉中的图像特征提取技术详解
计算机视觉图像特征提取是指从图像中提取出具有代表性的特征,以便计算机能够更好地理解和处理图像。常用的特征提取方法包括边缘检测、角点检测、纹理分析、颜色直方图等。在深度学习领域,卷积神经网络(CNN)也被广泛应用于图像特征提取任务。通过CNN,可以自动学习出图像中具有代表性的特征,从而提高计算机视觉领域的各项任务的准确性。
芯动大师
2025/05/19
2940
计算机视觉中的图像特征提取技术详解
DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式
一、DBSCAN聚类概述 基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现“球形”聚簇的缺点。 DBSCAN的核心思想是从某个核心点出发,不断向密度可达的区域扩张
悟乙己
2018/01/02
4.4K0
DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式
【Scikit-Learn 中文文档】聚类 - 无监督学习 - 用户指南 | ApacheCN
2.3. 聚类 未标记的数据的 Clustering(聚类) 可以使用模块 sklearn.cluster 来实现。 每个 clustering algorithm (聚类算法)有两个变体: 一个是 class, 它实现了 fit 方法来学习 train data(训练数据)的 clusters(聚类),还有一个 function(函数),是给定 train data(训练数据),返回与不同 clusters(聚类)对应的整数标签 array(数组)。对于 class(类),training dat
片刻
2018/01/15
5.5K0
【Scikit-Learn 中文文档】聚类 - 无监督学习 - 用户指南 | ApacheCN
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
各位读者好,在这片文章中我们尝试使用sklearn库比较k-means聚类算法和主成分分析(PCA)在图像压缩上的实现和结果。压缩图像的效果通过占用的减少比例以及和原始图像的差异大小来评估。图像压缩的目的是在保持与原始图像的相似性的同时,使图像占用的空间尽可能地减小,这由图像的差异百分比表示。图像压缩需要几个Python库,如下所示:
deephub
2020/05/09
3.3K0
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
【验证码识别专栏】今天不炼丹,用 cv 来秒验证码
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2024/12/02
3050
【验证码识别专栏】今天不炼丹,用 cv 来秒验证码
如何更稳健的计算组合最优权重(附代码)
今天分享的论文是Marcos López de Prado 2019年的论文《A ROBUST ESTIMATOR OF THE EFFICIENT FRONTIER》本文主要有两个创新点。
量化投资与机器学习微信公众号
2021/07/29
2.6K0
推荐阅读
相关推荐
python图像识别---------图片相似度计算
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验