图像特征

和文本特征类似,图像特征也是梯度提升树模型非常难以挖掘的一类数据,目前图像相关的问题,例如图像分类,图像分割等等几乎都是以神经网络为主的模型,但是在一些多模态的问题中,例如商品搜索推荐的问题中,里面既包含图像信息又含有文本信息等,这个时候基于梯度提升树模型的建模方案还是至关重要的,这个时候为了更好地使用所有的数据信息,我们需要对图像特征进行多方位的提取。

本节我们将会介绍图像特征提取中常常采用的方法技术。

1.图像长宽

图像的长宽可以表示图像的大小。

  • 图像的长宽以及channel数:表示图像的大小;

# !pip3 install opencv-python
import cv2
img = cv2.imread('./imgs/chapter7/img_example.jpeg')
img.shape
(810, 1440, 3)

2.图像格式特征

图像的格式有非常多种,例如bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp,avif等,不同格式的图像也会含有不同的信息,不同情况下我们会使用不同的图像形式进行存储。图像的存储格式主要可以反映真实性、透明性、矢量性(该回答摘自知乎jpg和png有什么区别?下showvim的回答。

  • 真实性中就是色彩度、位深、损耗(压缩)等;(jpg、jpeg、gif、tiff、bmp)

  • 透明性就很明显了,就是支技透明的特性,但这里也有一个就是位深,他会影响透明度的深度png8与png24的差异就在这里;(png)

  • 特殊动画,就是支持帧的特点,可以做成动画;(gif)4、 矢量性就可还原度,可再编辑的特性,通俗一点来讲就是很多人常说的放大不模糊的特点,因为他们的组成是由公式曲线方程生成的(但我们是可视化的编辑)(ai、cdr、eps)

这些信息的提取只需要对图像的文本进行正则匹配即可。

3.图像的创建时间

在一些图像分类的问题中,有一些图片是作者拍摄的或者收集的,所以相邻时间段的图片往往是一类图像,这个时候图像的创建时间就是一个非常重要的特征。

import time
import datetime
import osdef TimeStampToTime(timestamp):timeStruct = time.localtime(timestamp)return time.strftime('%Y-%m-%d %H:%M:%S',timeStruct)def get_FileCreateTime(filePath): filePath = filePatht = os.path.getctime(filePath)return TimeStampToTime(t)get_FileCreateTime('./imgs/chapter7/img_example.jpeg')
'2021-04-25 13:24:03'

4.图片的亮度特征

1.暗度

在很多广告中,图片的亮度如果太低的话,会让很多消费者觉得看不清,不利于宣传,用于也不会去点击,所以图片的亮度信息在这个时候是一种不错的特征。对图像中突出的颜色的分析可以很好地表明图像是否暗淡。

from collections import defaultdict
from scipy.stats import itemfreq
from scipy import ndimage as ndi
import matplotlib.pyplot as plt
from skimage import feature
from PIL import Image as IMG
import numpy as np
import pandas as pd
import operator
import cv2
import os def color_analysis(img):# obtain the color palatte of the image palatte = defaultdict(int)for pixel in img.getdata():palatte[pixel] += 1# sort the colors present in the image sorted_x = sorted(palatte.items(), key=operator.itemgetter(1), reverse = True)light_shade, dark_shade, shade_count, pixel_limit = 0, 0, 0, 25for i, x in enumerate(sorted_x[:pixel_limit]):if all(xx <= 20 for xx in x[0][:3]): ## dull : too much darkness dark_shade += x[1]if all(xx >= 240 for xx in x[0][:3]): ## bright : too much whiteness light_shade += x[1]shade_count += x[1]light_percent = round((float(light_shade)/shade_count)*100, 2)dark_percent = round((float(dark_shade)/shade_count)*100, 2)return light_percent, dark_percentdef perform_color_analysis(img, flag):path   = img im     = IMG.open(path)size   = im.sizehalves = (size[0]/2, size[1]/2)im1    = im.crop((0, 0, size[0], halves[1]))im2    = im.crop((0, halves[1], size[0], size[1]))try:light_percent1, dark_percent1 = color_analysis(im1)light_percent2, dark_percent2 = color_analysis(im2)except Exception as e:return Nonelight_percent = (light_percent1 + light_percent2)/2 dark_percent = (dark_percent1 + dark_percent2)/2 if flag == 'black':return dark_percentelif flag == 'white':return light_percentelse:return None
df = pd.DataFrame()
df['image'] = ['./imgs/chapter7/img_example.jpeg']
df['dullness'] = df['image'].apply(lambda x : perform_color_analysis(x, 'black'))
df.head()
  image dullness
0 ./imgs/chapter7/img_example.jpeg 39.735

2.亮度

如果图像太白或者太亮,这也是不利于图片的美观的,这种图片的点击率也会相对较低。此处我们判断所有通道上最亮的N个像素点的值大于某个阈值的比例来作为图像的亮度信息。

df['whiteness'] = df['image'].apply(lambda x : perform_color_analysis(x, 'white'))
df
  image dullness whiteness
0 ./imgs/chapter7/img_example.jpeg 39.735 0.0

5.图像均匀度

某些图像可能不包含像素变化,并且完全uniform的。平均像素宽度是表示图像中存在的边缘数量的度量。如果这个数字非常低,那么图像很可能是一个单一的的图像,无法表示正确的内容。此处我们可以直接使用skimage的Canny检测。

def average_pixel_width(img):path = img im = IMG.open(path)    im_array = np.asarray(im.convert(mode='L'))edges_sigma1 = feature.canny(im_array, sigma=3)apw = (float(np.sum(edges_sigma1)) / (im.size[0]*im.size[1]))return apw*100
df['average_pixel_width'] = df['image'].apply(lambda x : average_pixel_width(x))
df[['image','average_pixel_width']]
  image average_pixel_width
0 ./imgs/chapter7/img_example.jpeg 1.338563

6.图像的主导颜色

图片中使用的颜色在吸引用户方面起着重要的作用。可以创建与颜色相关的附加功能,例如主色和平均色。

def get_dominant_color(img):path   = img img    = cv2.imread(path)arr    = np.float32(img)pixels = arr.reshape((-1, 3))n_colors = 5criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 200, .1)flags = cv2.KMEANS_RANDOM_CENTERS_, labels, centroids = cv2.kmeans(pixels, n_colors, None, criteria, 10, flags)palette   = np.uint8(centroids)quantized = palette[labels.flatten()]quantized = quantized.reshape(img.shape)dominant_color = palette[np.argmax(itemfreq(labels)[:, -1])]return dominant_colordf['dominant_color'] = df['image'].apply(get_dominant_color)
df
<ipython-input-92-970fc6abdf35>:16: DeprecationWarning: `itemfreq` is deprecated!
`itemfreq` is deprecated and will be removed in a future version. Use instead `np.unique(..., return_counts=True)`dominant_color = palette[np.argmax(itemfreq(labels)[:, -1])]
  image dullness whiteness average_pixel_width dominant_color
0 ./imgs/chapter7/img_example.jpeg 39.735 0.0 1.338563 [163, 198, 219]
df['dominant_red'] = df['dominant_color'].apply(lambda x: x[0]) / 255
df['dominant_green'] = df['dominant_color'].apply(lambda x: x[1]) / 255
df['dominant_blue'] = df['dominant_color'].apply(lambda x: x[2]) / 255
df[['image','dominant_red','dominant_green','dominant_blue']]
  image dominant_red dominant_green dominant_blue
0 ./imgs/chapter7/img_example.jpeg 0.639216 0.776471 0.858824

7.各channel的统计特征

各个channel的全局统计特征,例如,各个channel的均值,方差,中位数,众数,分位数等等。

# - 以均值为例def get_average_color(img):path = img img = cv2.imread(path)average_color = [img[:, :, i].mean() for i in range(img.shape[-1])]return average_colordf['average_color'] = df['image'].apply(get_average_color)
df['average_red']   = df['average_color'].apply(lambda x: x[0]) / 255
df['average_green'] = df['average_color'].apply(lambda x: x[1]) / 255
df['average_blue']  = df['average_color'].apply(lambda x: x[2]) / 255
df[['image','average_red','average_green','average_blue']]
  image average_red average_green average_blue
0 ./imgs/chapter7/img_example.jpeg 0.497662 0.50784 0.532006

8.图像的模糊特征

该方法摘自于《Diatom Autofocusing in Brightfield Microscopy: A Comparative Study》,本文作者Pech-Pacheco等人提出了一种Laplacian滤波器的变种,可用来评估图像的模糊度,在该技术中,图像的单通道和Laplacian Filter卷积。如果指定的值小于阈值,则图像模糊,否则不会。

def get_blurrness_score(image):path =  image image = cv2.imread(path)image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)fm = cv2.Laplacian(image, cv2.CV_64F).var()return fmdf['blurrness'] = df['image'].apply(get_blurrness_score)
df[['image','blurrness']].head(5)
  image blurrness
0 ./imgs/chapter7/img_example.jpeg 475.782864

9.图像直方图特征

对图像中的所有像素点进行分箱,统计每个直方图中像素的个数,注意:很多时候图像的大小不一样,所以一般使用百分比特征效果会好一些。

有些时候我们会选择分箱的个数多一些,为了将产出的新特征加入到模型中,会对特征进行PCA或者SVD等降维操作。

def get_histogram_features(image):path =  image image = cv2.imread(path) print(image.ravel().shape)hist, bins  = np.histogram(image.ravel(), bins=50)return hist / image.ravel().shapehist = df['image'].apply(get_histogram_features)
hist[0]
(3499200,)
array([0.0054261 , 0.01778464, 0.02784208, 0.02863769, 0.01264546,0.01067358, 0.01119999, 0.00853052, 0.01141918, 0.0114409 ,0.01528206, 0.0153698 , 0.01494227, 0.01478738, 0.01672297,0.01708791, 0.02324588, 0.02150692, 0.02266575, 0.02503229,0.0280487 , 0.02289752, 0.02528178, 0.02137889, 0.02387231,0.02164495, 0.02553927, 0.02519462, 0.02330447, 0.02359082,0.02976452, 0.02889003, 0.03554155, 0.04038637, 0.03270405,0.02817644, 0.02875229, 0.0253618 , 0.02177298, 0.02141518,0.02612597, 0.01889403, 0.01441044, 0.01199503, 0.01037809,0.00855738, 0.01004915, 0.01521205, 0.00871342, 0.00990255])

图像特征-上篇(10大图像特征)相关推荐

  1. windows借鉴linux了吗,Windows应该借鉴Linux的10大功能特征

    Windows应该借鉴Linux的10大功能特征 2009年12月07日 11:11作者:cnbeta编辑:陈涛文章出处:泡泡网原创 分享 泡泡网软件频道12月7日 在可预见的未来,Windows和L ...

  2. 【餐饮大数据】大数据告诉你餐饮业10大明显特征

    自古便有"民以食为天",餐饮业一直是众多创业者最爱选择的行业之一.但是伴随电商.金融.大数据等众多因素的加入,餐饮业的野蛮生长时期逐渐过去,返璞归真回归到产品本身极致的追求.时代的 ...

  3. VRay for 3ds Max如何渲染大场景(大图像、大分辨率)的图?

    渲染非常大的图像可能会占用大量内存,因为非常大的分辨率需要将更多内存添加到场景自身的内存需求中.本教程介绍如何设置 V-Ray 以将非常大的图像直接渲染到磁盘,优化内存效率.通过将渲染图像文件直接写入 ...

  4. GoogleNet是怎么理解图像的?谷歌大神教你读懂「神经特征可视化」

    来源:雷克世界 编译:嗯~阿童木呀 概要:特征可视化使我们能够看到在ImageNet数据集上训练的GoogLeNet是如何构建对多层图像的理解的. 边缘(层 conv2d0) 纹理(层 mixed3a ...

  5. 常用的图像特征颜色特征、纹理特征、形状特征、空间关系特征

    http://www.360doc.com/content/10/0601/10/1412027_30625801.shtml 常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 一 颜色特 ...

  6. image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍

    介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...

  7. 神经网络提取图片特征,神经网络算法识别图像

    如何用Python和深度神经网络寻找相似图像 代码首先,读入TuriCreate软件包import turicreate as tc我们指定图像所在的文件夹image,让TuriCreate读取所有的 ...

  8. Opencv Sift和Surf特征实现图像无缝拼接生成全景图像

    Sift和Surf算法实现两幅图像拼接的过程是一样的,主要分为4大部分: 1. 特征点提取和描述 2. 特征点配对,找到两幅图像中匹配点的位置 3. 通过配对点,生成变换矩阵,并对图像1应用变换矩阵生 ...

  9. python图像特征提取与匹配_图像特征特点及其常用的特征提取与匹配方法

    常用的图像特征有颜色特征.纹理特征.形状特征.空间关系特征. 一颜色特征 (一)特点:颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图 ...

最新文章

  1. whitepages 被关闭_除了滑动关闭APP影响电池寿命,还有哪些操作触碰到了你的知识盲区?...
  2. C++使用默认参数的构造函数
  3. ios开发循环网络请求_谈谈 iOS 网络层设计(SSJNetWork封装缓冲,log日志,自动取消网络请求)...
  4. 丁磊的10w+刷屏股东信里,隐藏了网易20年长青的三个秘密
  5. sjms-4 行为型模式
  6. 2020-10-03
  7. PDF Expert使用教程:如何在Mac上使用PDF Expert编辑PDF
  8. 在著名出版社出版书,你也行——记录我写书出版的经历和体会
  9. 10.7 csp-s模拟测试63 Median+Game+Park
  10. 如何在Ubuntu 18.04上安装Elasticsearch Logstash Kibana(Elastic Stack)
  11. memcached安装部署及启动错误排查
  12. 常见物理性能测试仪器设备档案
  13. 面试整理—计算机及网络工程师常见问题
  14. sosoapi 项目之本地搭建
  15. HTML超大图片加载显示解决方案--图片切割转换成瓦片地图(BaiduMapTileCutter)
  16. 能源数字化,未来四十年看什么?
  17. 软骨鱼是WordPress构建SaaS平台的最优解决方案
  18. 高中就开始学的正态分布,原来如此重要
  19. MySQL之函数和谓词
  20. PythonChallenge闯关详解

热门文章

  1. 30了,程序员中的老司机们,30后的路该开向哪里
  2. STM32--RFID无线射频技术(RC522刷卡模块)
  3. 关于ping 工具使用的5个实例
  4. 知乎Live 预告:工程师在创业团队的技术挑战和成长
  5. 了解指纹锁方案技术特点和优点——西城微科
  6. win7虚拟机永恒之蓝漏洞复现
  7. 正态分布随机数是什么
  8. EV录屏有很大电流音的解决方法
  9. 聚福隆超市营销策划案
  10. 反转藏头情诗——练习