Eu tenho uma coleção de fotos JPEG, cada uma com 500 a 600 pixels no lado mais longo. Como posso detectar quais foram ampliadas algoritmicamente a partir de uma foto substancialmente menor?
Um mercado on-line exige que cada vendedor faça upload de fotos dos produtos que vende, e essas fotos devem ter pelo menos 500 pixels de largura ou 500 pixels de altura, porque as fotos dos produtos com poucos detalhes causam uma experiência ruim aos compradores. Já posso dizer se um vendedor está tentando contornar esse requisito adicionando uma borda de cor sólida, como estender o plano de fundo branco padrão com mais branco. Ultimamente, porém, os vendedores começaram a contornar isso, aumentando as fotos antigas tiradas antes da publicação do requisito de 500 pixels. Qual é uma boa maneira de determinar se as fotos foram ampliadas com interpolação mais próxima, bilinear ou bicúbica?
fonte
Respostas:
Faça um CÃO farejar o borrão nas fotos.
Se você for penalizar por fotos ampliadas digitalmente, também poderá penalizar por fotos fora de foco. As bordas e os detalhes desfocados em ambos causam a mesma experiência ruim aos espectadores, independentemente de serem causados por um original pequeno ou um foco ruim. O que você quer fazer é detectar a desfocagem, que é a ausência de altas frequências espaciais.
Tente fazer a diferença entre uma imagem e uma cópia borrada de si mesma. Se uma imagem já estiver embaçada, um desfoque Gaussiano de 1 pixel não mudará a imagem tanto quanto se ela fosse nítida. Portanto, haverá mais diferença entre uma imagem nítida e uma versão borrada do que entre uma imagem borrada e uma versão borrada adicional. Na visão computacional, essa técnica é chamada de " diferença de gaussianos " (DOG).
Eu apenas tentei isso em uma foto de 400x480 pixels e na mesma coisa que havia sido reduzida para 200x240 (50%) e depois ampliada para 400x480 (200%), e as bordas da foto aumentada foram visivelmente mais fracas. Não será conclusivo em um aumento moderado como 140%, mas ocorrerá casos flagrantes.
Várias bibliotecas de visão computacional incluem meios para calcular a diferença de gaussianos em uma imagem. O mesmo acontece com muitos editores gráficos de imagens. Versões recentes do GIMP, por exemplo. inclua uma macro DOG que automatize as etapas 2 a 4: Filtros> Detecção de borda> Diferença de Gaussians e defina os raios para 1,0 e 0,0.
Perguntas relacionadas em outros sites do Stack Exchange:
O DOG não pega o vizinho mais próximo, mas você pode fazer isso procurando um padrão de linhas e colunas idênticas ao vizinho imediato, na parte superior ou esquerda.
fonte
x + amt*(x - GB(x, r))
. A combinação de USM e ampliação aumentará apenas os médios (freqs espaciais médios), não os altos, porque os altos não existem. DOG (x, 1, 0) isola os altos.Não creio que isso seja possível no sentido geral. Existem muitos algoritmos de aumento de escala possíveis, com uma assinatura que pode ser difícil de detectar sem ambiguidade, sem o conhecimento do conteúdo da imagem (como exemplo extremo, uma área aumentada de cor uniforme ainda é uma cor uniforme ...).
Possivelmente, uma opção seria calcular uma métrica para a complexidade da imagem, como uma estimativa de entropia (por exemplo, consulte /programming/4935380/get-or-calculate-the-entropy-of-an-image-with -ruby-e-imagemagick ).
Se você fizer isso em um grande número de imagens, poderá gerar estatísticas para toda a coleção. Em seguida, você pode revisar manualmente as imagens discrepantes nessas estatísticas.
Infelizmente, isso sempre resultará em falsos positivos e as imagens que foram bem dimensionadas podem não ser capturadas (mas, se forem boas, isso importa?)
fonte
Eu adotaria uma abordagem híbrida. Eu acho que as outras idéias de usar uma Diferença de Gaussianas, verificar EXIF ou outros metadados ou até FFT podem ser combinadas. Outra maneira possivelmente mais fácil é simplesmente pegar cada imagem, reduzir a escala, aumentar a escala novamente e comparar. Se eles são muito parecidos (usando algo como o Delta E , talvez), é provável que tenham sido aumentados (ou embaçados, como sugere outro post). Talvez você possa estabelecer um limite do número de testes aprovados ou reprovados? Se mais da metade dos testes forem aprovados, é bom, caso contrário, é ruim ou precisa de intervenção humana para verificar, ou algo assim.
fonte
Você deve conseguir fazer um bom trabalho descompactando parcialmente os próprios dados JPEG e fazendo algumas contagens triviais.
Os dados JPEG são criados executando uma transformação discreta de cosseno nos dados da imagem original, quantizando (jogando fora os dados de alta resolução) e, em seguida, percorrendo o bloco DCT resultante em um padrão em zigue-zague e embalando o fluxo de bits resultante com a codificação Huffman.
Se você reverter a codificação de Huffman e desfazer o zigue-zague, terá uma série de blocos 8x8 DCT, nos quais os dados de frequência mais baixa estão no canto superior esquerdo do bloco e as informações de frequência mais alta estão no canto inferior direito.
O que isso significa é que você pode literalmente olhar para os dados nesse formato intermediário e dizer se foram ampliados, porque todos os blocos de 8x8 terão valores diferentes de zero apenas no canto superior esquerdo (aproximadamente).
fonte
Na verdade você pode
Você não precisa de um cachorro para farejar a foto. Vamos para:
http://rest7.com/image_upscaled
Nesta página, você pode enviar sua imagem e obter dimensões originais , como esta:
Às vezes, não adivinha a resolução original corretamente. Eu acho que depende do algoritmo de aumento de escala usado na foto. Também descobri que, se uma foto fosse aumentada e compactada em um formato JPEG com alta compressão (como 30%), os artefatos JPEG dificultariam a adivinhação desta página. Mas se as suas fotos forem de boa qualidade, aumentadas usando métodos populares (Lanczos, Bilinear), elas deverão ser bastante precisas.
Aqui estão 2 imagens de exemplo:
ORIGINAL
https: // i. pilha. imgur. com / iXYKV.png
(desculpe, eu não tenho reputação suficiente para postar mais de 2 links)
UPSCALED & CROPPED
Se você postar a foto cortada, esta página retornará:
Então você pode ver que a imagem foi ampliada e cortada. Ele não informa o tamanho da imagem original antes do corte, já que não é possível obter informações sobre algo que foi excluído apenas dos pixels deixados intactos.
fonte