[RESOLVIDO]verificar se uma imagem tem algum pixel corrompido  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

Saudações,
Bom não sei se estou postando no lugar correto mais vamos a dúvida.
Seguinte eu tenho um diretorio onde se encontra diversas imagens, imagens esta que foram obtidas através de um processo de recuperação de dados.
Com isso tem muitas imagens neste diretorio, algumas em perfeito estado e outras nem tanto.
Bom.. o que eu quero e fazer um algoritmo que percorra todas a imagens deste diretorio e consiga identificar as fotos que não estão em perfeito estado e delete as mesma,
restando assim somente as fotos em perfeitas condições.

Alguém poderia me ajudar, me dizendo como devo proceder para construir este algoritmo.
Att.

This message was edited 1 time. Last update was at 23/08/2011 13:11:47


Analista Desenvolvedor Java
Bacharel em Sistemas de Informação
java.lang.OutOfMemoryError
"Genialidade é 1% inspiração e 99% transpiração."
(Thomas A. Edison)

--
Microsoft Certification HTML5 Application Development (02/2013)
Microsoft Certification HTML5 with JavaScript and CSS3 (02/2013)
Oracle Certified Professional, Java SE 6 Programmer (02/2014)
--



[MSN]
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

ninguem se habilita?

Analista Desenvolvedor Java
Bacharel em Sistemas de Informação
java.lang.OutOfMemoryError
"Genialidade é 1% inspiração e 99% transpiração."
(Thomas A. Edison)

--
Microsoft Certification HTML5 Application Development (02/2013)
Microsoft Certification HTML5 with JavaScript and CSS3 (02/2013)
Oracle Certified Professional, Java SE 6 Programmer (02/2014)
--



[MSN]
juliocbq
GUJ Expert

Membro desde: 13/11/2008 12:10:18
Mensagens: 4972
Offline

qual é o parâmetro para saber se o "pixel está corrompido"?
JoaoBluSCBR
JavaEvangelist
[Avatar]

Membro desde: 18/11/2010 15:53:29
Mensagens: 492
Localização: Blumenau (SC)
Offline

Tem duas de cada imagem para comparar?

Ou existe um valor em pixels corrompidos que os identifique?

Mapas de pixel são sequencias que podem conter qualquer
valor e estes identificam a cor daquele pixel. Como identificar
um pixel que não deveria estar presente? Que cor não poderia
haver numa imagem?

Só se você entendesse que a imagem tem determinadas cores
e você procurasse por pixels que estão fora desse padrão. Mas
duvida que consiga automatizar isso. O que poderia fazer é
criar um software que identificasse quadros em que há pixels
muito fora do padrão geral da imagem, mostrasse esse quadro
ampliado (em Zoom) para um operador dizer se isso é uma
anomalia ou não.

Mas é um trabalho estatístico bastante complexo. Acho dificil
haver imagens com esse nível de contraste.
[Email] [MSN]
JoaoBluSCBR
JavaEvangelist
[Avatar]

Membro desde: 18/11/2010 15:53:29
Mensagens: 492
Localização: Blumenau (SC)
Offline

Só mais uma coisa.

O processo de recuperação deve deixar áreas vazias ou preenchidas com
um mesmo valor de cor em todos os pixels.

Essas áreas poderiam ser identificadas mas ainda assim acho que um
operador teria de confirmar se são falhas ou apenas planos de mesma
cor.

Ou o processo de recuperação coloca um valor fixo que possa ser identificado?
[Email] [MSN]
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

juliocbq wrote:qual é o parâmetro para saber se o "pixel está corrompido"?


O que acontece é o seguinte.. quanto a imagem que não esta em perfeito estado, acontece o seguinte parte dela vem em forma normal e o restante não foi recuperado corretamente,
esse pedaço da imagem que nao foi recuperado vei preenchido com cinza. Dai eu queria excluir todas a imagens que tivesse dessa forma.

Analista Desenvolvedor Java
Bacharel em Sistemas de Informação
java.lang.OutOfMemoryError
"Genialidade é 1% inspiração e 99% transpiração."
(Thomas A. Edison)

--
Microsoft Certification HTML5 Application Development (02/2013)
Microsoft Certification HTML5 with JavaScript and CSS3 (02/2013)
Oracle Certified Professional, Java SE 6 Programmer (02/2014)
--



[MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 9854
Offline

Por "recuperação de dados" você quis dizer "eu tinha um HD que pifou e tive de mandar o HD para um lugar que conseguiu recuperar mais ou menos as fotos do HD?"

Nesse caso, provavelmente você tem vários arquivos com pedaços faltando ou então alguns arquivos com coisas que vieram de outros arquivos.

Como arquivos de fotos normalmente são compactados (JPEG, PNG) então fatalmente haverá algum problema na descompactação dos arquivos corrompidos.

Uma forma de automatizar o processo é achar um programa que converta as imagens originais para algum outro formato e que retorne um código de erro se tiver algum problema na conversão. Tais programas normalmente são em linha de comando, procure por algo parecido com "jpg2png" ou coisa parecida.
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

entanglement wrote:Por "recuperação de dados" você quis dizer "eu tinha um HD que pifou e tive de mandar o HD para um lugar que conseguiu recuperar mais ou menos as fotos do HD?"

Nesse caso, provavelmente você tem vários arquivos com pedaços faltando ou então alguns arquivos com coisas que vieram de outros arquivos.

Como arquivos de fotos normalmente são compactados (JPEG, PNG) então fatalmente haverá algum problema na descompactação dos arquivos corrompidos.

Uma forma de automatizar o processo é achar um programa que converta as imagens originais para algum outro formato e que retorne um código de erro se tiver algum problema na conversão. Tais programas normalmente são em linha de comando, procure por algo parecido com "jpg2png" ou coisa parecida.


Isso mesmo que aconteceu.. eu usei o foremost e ele recuperou a cerca de 100.000 imagens uma perfeitas outras nem tanto.. eu queria excluir essas defeituosas.
Segue um exemplo de uma foto defeituosa.
 Nome do arquivo 18188752.jpg [Disk] Download
 Descrição Foto Defeituosa
 Tamanho 400 Kbytes
 Baixado:  120 vez(es)

This message was edited 2 times. Last update was at 23/08/2011 08:14:47

[MSN]
balrog
JavaEvangelist

Membro desde: 25/05/2003 16:42:17
Mensagens: 406
Localização: London
Offline

ao inves de tentar fazer um foguete chegar na lua, porque vc nao checa se seus motores estao funcionando primeiro?
vc mesmo disse que suas images estao corrompidas (algumas) ... com base nesse detalhe, antes de ficar imaginando um milhao de possibilidades com pixels, simplesmente tente abrir o arquivo ... caso o arquivo esteja mesmo corrompido, vc vai tomar excecao na cabeca ...

balrog
SCJA, SCJP, SCWCD, SCBCD, SCDJWS, SCEA

http://www.flickr.com/photos/planetadventure/sets/

Twitter @planetadventure
[WWW]
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

balrog wrote:ao inves de tentar fazer um foguete chegar na lua, porque vc nao checa se seus motores estao funcionando primeiro?
vc mesmo disse que suas images estao corrompidas (algumas) ... com base nesse detalhe, antes de ficar imaginando um milhao de possibilidades com pixels, simplesmente tente abrir o arquivo ... caso o arquivo esteja mesmo corrompido, vc vai tomar excecao na cabeca ...


Eu já realizei esse processo e conseguir eliminar algumas.
Os processos que ja realizei foram, eliminar as fotos menor que um tamanho x (Ex: fotos menor que 40K).
Segundo processo foi tentar abrir cada uma.. aquela imagem que gerar alguma exceção eu exclui ela.

This message was edited 2 times. Last update was at 23/08/2011 10:31:10


Analista Desenvolvedor Java
Bacharel em Sistemas de Informação
java.lang.OutOfMemoryError
"Genialidade é 1% inspiração e 99% transpiração."
(Thomas A. Edison)

--
Microsoft Certification HTML5 Application Development (02/2013)
Microsoft Certification HTML5 with JavaScript and CSS3 (02/2013)
Oracle Certified Professional, Java SE 6 Programmer (02/2014)
--



[MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 25097
Localização: Curitiba/PR
Offline

1. Carregue um BufferedImage com a imagem em questão:



2. Use o método getPixel() para obter a cor de um pixel:



Agora vai de você criar uma lógica com isso. Você poderia, por exemplo, contar todos os pixels cinza e ver se eles tem uma proporção maior do que x% da sua imagem (para não eliminar uma imagem que casualmente tenha um único pixel cinza).

Certifique-se também que os pixels cinza da sua imagem tenham exatamente o mesmo valor em RGB, caso contrário, você terá que fazer uma função que, dado um valor de RGB, diga se ele se enquadra ou não na sua definição de cinza (geralmente tons de cinza são valores de RGB idênticos ou muito parecidos, sendo r=g=b=255 branco e r=g=b=0 preto).

This message was edited 2 times. Last update was at 23/08/2011 10:45:02


@ViniGodoy - Lattes

Novo no fórum? Leia nosso How to.

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 25097
Localização: Curitiba/PR
Offline

jweibe wrote:Isso mesmo que aconteceu.. eu usei o foremost e ele recuperou a cerca de 100.000 imagens uma perfeitas outras nem tanto.. eu queria excluir essas defeituosas. Segue um exemplo de uma foto defeituosa.


Essa imagem não abriu em qualquer editor de imagem que eu tenha aqui.
[WWW]
jweibe
Virtual Machine Man
[Avatar]

Membro desde: 09/02/2011 15:23:55
Mensagens: 545
Localização: Brasília/DF
Offline

ViniGodoy wrote:
jweibe wrote:Isso mesmo que aconteceu.. eu usei o foremost e ele recuperou a cerca de 100.000 imagens uma perfeitas outras nem tanto.. eu queria excluir essas defeituosas. Segue um exemplo de uma foto defeituosa.


Essa imagem não abriu em qualquer editor de imagem que eu tenha aqui.


ViniGodoy to usando linux e consigo abrir ela sem problemas.
Quando eu tento abrir ela com o

ela me gera um erro o mesmo que acontece quando eu tento abrir com o Gimp, uma vez que ela me gera um erro eu considero que a mesma não poderá estar em perfeitas condições e eu descarto ela.
O que ta pegando agora e que tem imagens que mesmo estando corrompida, ao tentar abrir ela não ta me gerando nenhum erro (o que é estranho visto que outras gera um erro).

Fiz uma implementação de acordo com o que vc me recomendou pegando os pixel.

A saida da parte da imagem que esta em perfeita condição é:
java.awt.Color[r=39,g=31,b=10]
java.awt.Color[r=36,g=29,b=10]
java.awt.Color[r=37,g=30,b=12]
java.awt.Color[r=37,g=30,b=14]
java.awt.Color[r=35,g=28,b=12]
java.awt.Color[r=32,g=24,b=11]
java.awt.Color[r=29,g=21,b=8]
java.awt.Color[r=27,g=21,b=9]
java.awt.Color[r=24,g=21,b=12]

A saida da parte da imagem que esta corrompida (como eu disse acima esta vindo em cinza) é:
java.awt.Color[r=128,g=128,b=128]
java.awt.Color[r=128,g=128,b=128]
java.awt.Color[r=128,g=128,b=128]
java.awt.Color[r=128,g=128,b=128]

Sendo assim ViniGodoy quando eu tiver uma sáida de varios RGB ( java.awt.Color[r=128,g=128,b=128] ) consecutivos eu posso considerar que esta imagem não esta em perfeita condição?
Tirei um print da imagem!! Segue em anexo!
[Thumb - Screenshot.png]
 Nome do arquivo Screenshot.png [Disk] Download
 Descrição Imagem Recuperada (Print)
 Tamanho 29 Kbytes
 Baixado:  61 vez(es)

[MSN]
balrog
JavaEvangelist

Membro desde: 25/05/2003 16:42:17
Mensagens: 406
Localização: London
Offline

Eu já realizei esse processo e conseguir eliminar algumas.

se essa filtragem soh nao basta,

e ja que:

to usando linux


instale ImageMagic e escreva um script com identify que identifque todas as imagens que estejam com problemas

http://www.imagemagick.org/script/identify.php

vc deve ver algo do tipo (usando sua imagem acima)

"identify: Corrupt JPEG data: premature end of data segment `18188752.jpg'."

ou continue quebrando a cabeca escovando pixels

balrog
SCJA, SCJP, SCWCD, SCBCD, SCDJWS, SCEA

http://www.flickr.com/photos/planetadventure/sets/

Twitter @planetadventure
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 25097
Localização: Curitiba/PR
Offline

Segundo o que você está descrevendo, creio que sim.

O que eu faria é o seguinte:

1. Conte todos os pixels com valor 128,128,128
2. Se o número de pixels for maior do que 5% (ou talvez até menos) do tamanho da imagem, descarte-a.

Isso se resume a um for simples:


Isso no fundo é uma análise extremamente simplória de histograma.

This message was edited 2 times. Last update was at 23/08/2011 13:16:51


@ViniGodoy - Lattes

Novo no fórum? Leia nosso How to.

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team