Есть ли способ оформировать ли фотографию в фокусе?
-
05-10-2019 - |
Вопрос
Если бы я создал веб-сервис, который использовал ряд фотографий для иллюстрации сервиса, было бы полезно фактически обнаруживать, являются ли фотографии в фокусе или нет.
Есть ли способ сделать это программически? (Даже лучше, есть ли реализация такой рутины с открытым исходным кодом?)
Решение
Откуда вы знаете, что это в фокусе? Вы узнаете объект, конечно, но в целом, потому что он имеет деталь. Деталь, как правило, означает резкое изменение цвета в течение короткого диапазона пикселей. Я уверен, что вы можете найти много алгоритмов обнаружения краев через Google. Не давая это много мысли:
edgePixelCount = 0;
for each pixel in image
{
mixed = pixel.red + pixel.blue + pixel.green;
for each adjacentPixel in image.adjacentPixels(pixel)
{
adjacentMixed =
adjacentPixel.red +
adjacentPixel.blue +
adjacentPixel.green;
if ( abs ( adjacentMixed - mixed ) > EDGE_DETECTION_THRESHOLD )
{
edgePixelCount++;
break;
}
}
}
if (edgePixelCount > NUMBER_OF_EDGE_PIXELS_THRESHOLD)
{
focused = true;
}
Примечание. Вам, вероятно, нужно будет использовать «соседние пиксели» с некотором расстояния, а не только немедленные пиксели для краевых. Даже в фокусе высокие изображения EXES часто могут иметь градиенты.
Другие советы
Посмотрите в методы обнаружения реального края - с помощью лаплацких фильтров, гуальских фильтров, бревенчатых (лаплацганских гауссов) и т. Д. Эти методы намного более тираются, чтобы соответствовать вашим конкретным случаям, чем простая (Albee Elegant) Patrickv.