Проверка, является ли изображение в основном черно-белым или цветным - PullRequest
0 голосов
/ 29 ноября 2018

enter image description here Я пытаюсь классифицировать, если изображение в основном содержит черно-белое или цветное изображение, если быть точным, это фотография фотокопии (например, ксерокса), которая в основном черно-белая.Это изображение не одноканальное, а трехканальное.

Я просто хочу знать, есть ли какие-то очевидные способы решения этой проблемы, которых мне не хватает.

на данный момент я пытаюсь построитьгистограммы и может быть подсчет пикселей, но это не выглядит многообещающе, любые предложения по этому вопросу будут действительно полезны.

Заранее спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Я не уверен в точном случае использования, но, столкнувшись с подобными проблемами, я использовал эту довольно полезную статью.

https://www.alanzucconi.com/2015/05/24/how-to-find-the-main-colours-in-an-image/

GitHub, содержащий полный код, находится здесь: https://gist.github.com/jayapal/077f63f3163abbfb3c50c7d209524cc6

Если это для вашего собственного визуального изображения, гистограммы должно быть достаточно, если выОднако при попытке автоматизировать может быть полезно округлить значения цвета вверх или вниз, чтобы получить информацию о том, является ли изображение темнее или светлее определенного значения.

Для чего используется этот код набольшая перспектива?Возможно, это поможет предоставить более адекватную информацию

Редактировать: Приведенный выше код также дает возможность определить область изображения, надеюсь, это сделает ваш выбор более точным

Добавление кода напрямую

from sklearn.cluster import KMeans
from sklearn import metrics
import cv2
import numpy as np
import cv2
image = cv2.imread("red.png")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

# Resize it
h, w, _ = image.shape
w_new = int(100 * w / max(w, h) )
h_new = int(100 * h / max(w, h) )

image = cv2.resize(image, (w_new, h_new));


# Reshape the image to be a list of pixels
image_array = image.reshape((image.shape[0] * image.shape[1], 3))
print image_array
# Clusters the pixels
clt = KMeans(n_clusters = 3)
clt.fit(image_array)

def centroid_histogram(clt):
    # grab the number of different clusters and create a histogram
    # based on the number of pixels assigned to each cluster
    numLabels = np.arange(0, len(np.unique(clt.labels_)) + 1)
    (hist, _) = np.histogram(clt.labels_, bins = numLabels)

    # normalize the histogram, such that it sums to one
    hist = hist.astype("float")
    hist /= hist.sum()

    # return the histogram
    return hist


# Finds how many pixels are in each cluster
hist = centroid_histogram(clt)

# Sort the clusters according to how many pixel they have
zipped = zip (hist, clt.cluster_centers_)
zipped.sort(reverse=True, key=lambda x : x[0])
hist, clt.cluster_centers = zip(*zipped)

# By Adrian Rosebrock
import numpy as np
import cv2



bestSilhouette = -1
bestClusters = 0;

for clusters in range(2, 10):
    # Cluster colours
    clt = KMeans(n_clusters = clusters)
    clt.fit(image_array)

    # Validate clustering result
    silhouette = metrics.silhouette_score(image_array, clt.labels_, 
    metric='euclidean')

    # Find the best one
    if silhouette > bestSilhouette:
        bestSilhouette = silhouette;
        bestClusters = clusters;

print bestSilhouette
print bestClusters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...