图像特征——下篇

举报
AI浩 发表于 2021/12/22 23:43:48 2021/12/22
【摘要】 图像特征 在图像特征系列,我们列举了这几年kaggle竞赛平台上90%以上最为常用的图像特征,对应的框架如下,很多特征已经在之前的上篇和中篇介绍完了,此处我们弥补上剩下的一些常用图像特征:   1.图像色彩特征 图像色彩有许多实际用途,包括评估压缩算法、评估给定相机传感器模块对颜色的敏感度、计算图像的“...

图像特征

图片

在图像特征系列,我们列举了这几年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等等以及基于这些特征的聚类特征,还有图像的人脸数等等。在实际问题中,图像相关的特征非常多,我们可以依据不同的问题对其进行归类,例如纹理特征;区域特征;空间关系特征等等。

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/116292714

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。