особенности изображения
В серии функций изображений мы перечислили более 90% наиболее часто используемых функций изображений на платформе соревнований kaggle за последние годы. Соответствующая структура выглядит следующим образом. Многие функции были представлены в предыдущих главах и главах. Здесь мы дополняют остальные. Некоторые общие черты изображений:
1. Цветовые характеристики изображения
Цвет изображения имеет множество практических применений, включая оценку алгоритмов сжатия, оценку чувствительности данного сенсорного модуля камеры к цвету, расчет «эстетического качества» изображения и т. д. Изображения с более высоким цветом, как правило, ярче и привлекательнее для пользователей. Здесь мы ссылаемся на статью 2003 года «Измерение красочности в естественных изображениях» с использованием 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. Характеристики номинала
Признак номинальной стоимости, как правило, находится в изображении лица. Во многих проблемах, связанных с рекомендацией видео, характеристика номинальной стоимости персонажа обложки видео является очень важной информацией. Такого рода проблемы возникают в некоторых задачах конкуренции данных рекомендаций видео. , Как правило, кликабельность качественной видеообложки будет намного выше. В настоящее время также существует множество инструментов, позволяющих напрямую рассчитывать характеристики номинала. Например, похожие инструменты есть у Questyle.
резюме
Существует множество функций, основанных на изображениях.В этой главе в основном перечислены некоторые эффективные функции, которые обычно использовались в прошлых конкурсах данных.Здесь мы в основном суммируем их по двум типам функций: ①Общие функции, включая размер изображения, формат изображения, создание изображения время, яркость и т. д. ② Локальные функции, такие как SIFT, SURF и т. д., и функции кластеризации на основе этих функций, а также количество лиц на изображении и т. д. В практических задачах существует много признаков, связанных с изображением, и мы можем классифицировать их в соответствии с различными проблемами, такими как признаки текстуры, региональные признаки, признаки пространственного отношения и так далее.