2013-11-26 2 views
0

Я пытаюсь найти способ «забить» изображения, которые могут быть логотипом. Я подумал об использовании концепции коэффициента контрастности. Я буду сравнивать одно изображение, которое явно является логотипом с другими изображениями, которые в основном будут только цвет фона или цвет фона с колонкой другого цвета. Например:Как найти коэффициент контрастности или любой вид измерения для поиска изображения с помощью «содержимого»?

Black background

против

Jacks background

Итак, как я могу измерить коэффициент контрастности, используя любую библиотеку Ruby? В настоящее время я использую Minimagick, но я не нашел способ получить коэффициент контрастности. Есть варианты для его модификации, но не для того, чтобы получить соотношение для каждого.

+0

Кто бы ни проголосовал за закрытие, могу ли я спросить, почему? –

+0

Вы также можете попробовать спросить здесь: http://dsp.stackexchange.com/questions/tagged/image-processing – Casper

ответ

1

Вы можете сделать это примерно в два этапа.

Во-первых получить гистограмму изображения с помощью RMagick:

http://www.simplesystems.org/RMagick/doc/image1.html#color_histogram

Следующим шагом является применение некоторой формулы. Тот, который я приводил ниже, я только что придумал с головы. Тем не менее, есть несколько других:

http://en.wikipedia.org/wiki/Contrast_(vision)#Formula

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

color_histogram.each do |pixel, count| 
    total_red += pixel.red*count 
    total_blue += pixel.blue*count 
    total_green += pixel.green*count 
end 

average_red = total_red/pixel_count average_blue = total_blue/pixel_count average_green = total_green/pixel_count

После того, как у Вас есть свой "средний цвет", определить общее расстояние между каждым пикселем и средний:

color_histogram.each do |pixel, count| 
    distance_red += Math.abs(average_red - pixel.red) 
    distance_blue += Math.abs(average_blue - pixel.blue) 
    distance_green += Math.abs(average_green - pixel.green) 
end 

сумма distance_red + distance_blue + distance_green должна примерно быть эквивалентна «противоположность» изображения.

+0

Можете ли вы ссылаться на бумагу, в которой указан этот метод. благодаря – Abc

Смежные вопросы