我是靠谱客的博主 时尚手套,最近开发中收集的这篇文章主要介绍图像特征——下篇,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

图像特征

图片

在图像特征系列,我们列举了这几年kaggle竞赛平台上90%以上最为常用的图像特征,对应的框架如下,很多特征已经在之前的上篇和中篇介绍完了,此处我们弥补上剩下的一些常用图像特征:

图片

 

图片

图片

1.图像色彩特征

图像色彩有许多实际用途,包括评估压缩算法、评估给定相机传感器模块对颜色的敏感度、计算图像的“美学质量”等等,图像色彩越高的话往往图片越加亮丽更能吸引用户。此处我们借鉴2003年的论文"Measuring colorfulness in natural images"使用OpenCV和Python实现色彩度量的计算。

图片

import imutils
import cv2
def image_colorfulness(image):
    # split the image into its respective RGB components
    (B, G, R) = cv2.split(image.astype("float"))
    # compute rg = R - G
    rg = np.absolute(R - G)
    # compute yb = 0.5 * (R + G) - B
    yb = np.absolute(0.5 * (R + G) - B)
    # compute the mean and standard deviation of both `rg` and `yb`
    (rbMean, rbStd) = (np.mean(rg), np.std(rg))
    (ybMean, ybStd) = (np.mean(yb), np.std(yb))
    # combine the mean and standard deviations
    stdRoot = np.sqrt((rbStd ** 2) + (ybStd ** 2))
    meanRoot = np.sqrt((rbMean ** 2) + (ybMean ** 2))
    # derive the "colorfulness" metric and return it
    return stdRoot + (0.3 * meanRoot)

imagePath = './imgs/chapter7/img_example.jpeg'
image = cv2.imread(imagePath)
image = imutils.resize(image, width=250)
C = image_colorfulness(image) 
C
52.681127440780195

图片

图片

2.不同色度空间中图像的统计特征

在不同色度空间中,例如YUV色度空间,HSV色度空间中图像的统计特征。

图片

import cv2  
from matplotlib import pyplot as plt
imagePath = './imgs/chapter7/img_example.jpeg'
image = cv2.imread(imagePath)
plt.figure(figsize=(15, 8))
plt.subplot(221)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
plt.imshow(gray)
plt.subplot(222)
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)     # RGB转换为HSV
plt.imshow(hsv)
plt.subplot(223)
yuv = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)     # RGB转换为YUV
plt.imshow(yuv) 
plt.subplot(224) 
Ycrcb = cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb) # RGB转换为YCrCb
plt.imshow(Ycrcb) 
<matplotlib.image.AxesImage at 0x7f911272b040>
print('mean sts: gray {}, hsv {}, yuv {}, Ycrcb {}'.format(gray.mean(),hsv.mean(),yuv.mean(),Ycrcb.mean())) 
print('std sts: gray {}, hsv {}, yuv {}, Ycrcb {}'.format(gray.std(),hsv.std(),yuv.std(),Ycrcb.std())) 
mean sts: gray 131.0327031893004, hsv 110.55873914037494, yuv 128.7515240626429, Ycrcb 129.03808127572017
std sts: gray 62.02471104426188, hsv 68.03890817377417, yuv 37.85379451513613, Ycrcb 37.73100132814874

 

图片

图片

3.图像差值变化直方图特征

和图像直方图特征类似,不同的地方在于此处我们对图像中相邻像素先进行差值计算,然后再进行分箱操作,用来统计相邻像素之间的关系。

import pandas as pd
import cv2

df = pd.DataFrame()
df['image'] = ['./imgs/chapter7/img_example.jpeg']

def get_histogram_diff_features(image):
    path =  image 
    image = cv2.imread(path) 
    image_diff = (image[:,1:,:] - image[:,:-1,:]) 
    hist, bins  = np.histogram(image_diff.ravel(), bins=50)
     
    return hist / image_diff.ravel().shape

hist_diff = df['image'].apply(get_histogram_diff_features)
hist_diff[0]
array([6.95175548e-01, 2.09816488e-02, 5.69239613e-03, 2.42595309e-03,
       1.39728950e-03, 9.40868287e-04, 7.48690935e-04, 6.41735087e-04,
       5.65950863e-04, 5.04465550e-04, 5.11329027e-04, 3.71199707e-04,
       3.38884170e-04, 3.11144285e-04, 2.66531685e-04, 2.30212453e-04,
       2.14483652e-04, 1.79308333e-04, 1.70443009e-04, 1.55858120e-04,
       1.69871052e-04, 1.36983559e-04, 1.14677259e-04, 1.16679107e-04,
       1.10673564e-04, 1.12103455e-04, 1.07813782e-04, 1.29262148e-04,
       1.30978017e-04, 1.42703123e-04, 1.85599854e-04, 1.63579532e-04,
       1.75876595e-04, 1.94751156e-04, 2.36217995e-04, 2.59096252e-04,
       3.03422873e-04, 3.44031778e-04, 3.83496770e-04, 4.50415669e-04,
       6.16283027e-04, 5.74244231e-04, 6.47740629e-04, 7.42971371e-04,
       8.91108080e-04, 1.22942029e-03, 2.04760393e-03, 4.53704419e-03,
       1.52071769e-02, 2.37714233e-01])

图片

图片

4.基于预训练特征的K近邻&聚类特征

基于预训练的图像模型,我们往往可以得到每个图像的向量表示,这里就和文本特征类似,我们可以对其进行距离的计算,计算K近邻特征或者进行聚类,具体的细节可以直接参考文本特征的内容。

 

图片

图片

5.图片中人脸的个数

人脸的多少可以帮助我们判别某些图片是否是人物相关的还是自然景观等等,这在一些推荐问题中能带来一些帮助,例如有些人喜欢看山水风景图片,这个时候人脸数为0的图片能带来些许帮助。目前图片中人脸的个数可以直接使用opencv的库进行识别。

import cv2
import os 

photopath  ='XXX.jpg'
classifier ='haarcascade_frontalface_default.xml'

#读取图片
image = cv2.imread(photopath) 
#灰度转换
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#获取人脸识别训练数据
face_casacade = cv2.CascadeClassifier(classifier) 
#探测人脸
faces = face_casacade.detectMultiScale(image)

图片

图片

6.颜值特征

颜值特征一般是在人脸图像中,在许多视频相关的推荐问题中,视频的封面人物的颜值特征是非常重要的信息,这在一些视频推荐数据竞赛问题中曾今出现过此类问题,一般高颜值的视频封面点击率会高很多。而目前也存在非常多的工具可以直接计算颜值的特征。例如旷世就有类似的工具。

图片

小结

图片

基于图像的特征是非常多的,本章节主要列举了在过往的数据竞赛中常用的一些有效的特征,在这边我们主要将其归纳为了两类特征,①.全局的特征,包括图像的大小、图像的格式、图像的创建时间、亮度等等;②.局部特征,例如SIFT、SURF等等以及基于这些特征的聚类特征,还有图像的人脸数等等。在实际问题中,图像相关的特征非常多,我们可以依据不同的问题对其进行归类,例如纹理特征;区域特征;空间关系特征等等。

最后

以上就是时尚手套为你收集整理的图像特征——下篇的全部内容,希望文章能够帮你解决图像特征——下篇所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部