Knitter Posted April 17, 2009 at 08:58 PM Report #257369 Posted April 17, 2009 at 08:58 PM A questão não é bem sobre como fazer mas mais como procurar, já que esta está a ser a parte pior. Preciso estudar uma forma de como, tendo uma imagem em JPEG, possa identificar uma pequena área, nada mais que um pequeno quadrado/círculo e determinar se a dita área está preenchida ou está em branco. O problema é como encontrar informação mais especifica na miríade de informação que se encontra sobre processamento de imagem, que em nada está relacionada com o que pretendo fazer. Conhecem alguma biblioteca que permita fazer o que pretendo? Ou onde possa encontrar informação sobre o assunto?
Triton Posted April 17, 2009 at 10:13 PM Report #257386 Posted April 17, 2009 at 10:13 PM Estive a pesquisar e encontrei algumas coisas que podem ser interessantes, mas não li muito sobre o assunto, por isso, talvez não seja nada de útil para o teu caso. http://en.wikipedia.org/wiki/Pattern_recognition http://en.wikipedia.org/wiki/OpenCV http://stackoverflow.com/questions/25977/how-can-i-measure-the-similarity-between-two-images http://stackoverflow.com/questions/589144/basic-pixel-cell-counting-algorithm <3 life
joseerodrigues Posted April 18, 2009 at 12:27 AM Report #257423 Posted April 18, 2009 at 12:27 AM Knitter podes explicar melhor o problema pff ? Pergunto pois já tive que implementar analise de imagem (pathfind, ocr, etc) e talvez possa ajudar... Cumprimentos
bruno1234 Posted April 18, 2009 at 12:37 AM Report #257424 Posted April 18, 2009 at 12:37 AM Dá uma vista olhos nesta biblioteca: Java Advanced Imaging API http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos
Knitter Posted April 18, 2009 at 11:07 AM Author Report #257446 Posted April 18, 2009 at 11:07 AM Já andei de volta da JAI, mas tudo o que encontro é para problemas que, pelo menos para mim, me parecem mais complexos do que o que eu pretendo. O objectivo é relativamente simples, imaginem uma folha em papel normal, com uma data de campos com assinaturas, em frente de cada assinatura poderá existir um quadrado ou um círculo, não interessa, apenas interessa que será uma área delimitada e que saberei sempre em que coordenada X estará desenhado, a coordenada Y dependerá da localização do primeiro elemento mas poderá ser fixa também, portanto, sei onde estão os elementos, agora quero apenas saber se o elemento está preenchido ou vazio. O preenchimento pode ser uma cruz ou simplesmente estar o elemento todo riscado, o que for mais simples. A ideia é que além da pessoa assinar, pode fazer a cruz ou preencher o quadrado/círculo que está à frente do seu nome. Depois esta folha, será digitalizada e chegará ao sistema como um JPG, não interessa de onde esse JPG vem, apenas que na altura de processar o JPG, este estará algures no disco. Depos de ler o JPG quero ver o estado do dito quadrado/círculo. Não me interessa OCR, nem análises mais elaboradas da imagem, apenas quero saber se determinada área está preenchida ou não, cores também não são importantes. Pensei que isto se pudesse enquadrar em edge detection, mas o que vejo é sempre algo mais complicado, como detecção de padrões em imagens, e eu quero apenas saber se um elemento está ou não na página, tendo em conta que não vou andar à procura dele em toda a imagem mas que sei onde o dito elemento é suposto existir.
joseerodrigues Posted April 18, 2009 at 11:36 AM Report #257455 Posted April 18, 2009 at 11:36 AM Knitter não podes ler os pixeis da img a comecar em XY ? lês, achas a média RGB de todos os pixeis do "quadrado" e isso vai.te dar uma ideia de se ele está preenchido ou não... ou talvez não tenha percebido bem... :S
Knitter Posted April 18, 2009 at 11:59 AM Author Report #257459 Posted April 18, 2009 at 11:59 AM Talvez possa fazer isso... é uma ideia. Aqui está um rabisco do que pretendo, apenas me interessa determinar os ON/OFF, tudo o resto é algo que não interessa ao sistema, http://img6.imageshack.us/img6/886/digitalizar0006n.th.png
cheires Posted April 18, 2009 at 12:28 PM Report #257462 Posted April 18, 2009 at 12:28 PM Já percebi o que pretendes. Basicamente tens que aplicar algoritmos de processamento digital de imagem. Convertes a imagem para preto/branco, por forma a não comprometer a informação de que necessitas. Depois basta apenas detectares os que estão preenchidos, pois estando os outros a branco, não estão preenchidos. Fazer isso em java é que não sei como, em mathlab era bem mais simples. Mas tendo a imagem binária (preto e branco) é percorrer o array da imagem a detectares as partes que têm 1.
Knitter Posted April 18, 2009 at 12:33 PM Author Report #257464 Posted April 18, 2009 at 12:33 PM Coloquei na secção de Java por ser inicialmente onde pretendia fazer alguns testes, a tecnologia final ainda não está definida, nem sei se valerá ou não a pena, dependerá do custo/benefício de tal implementação. Inicialmente o meu problema é saber o que procurar ou onde procurar informação. MatLab não será uma opção, preciso de algo que seja livre ou que, a ser pago, tenha valores que sejam razoáveis para os objectivos.
NameException Posted April 18, 2009 at 01:56 PM Report #257481 Posted April 18, 2009 at 01:56 PM Boas Knitter, Estando a desenvolver a minha tese de Mestrado no âmbito do processamento de imagens digitais, penso que te posso dar umas dicas... Pelo que percebi, sabes o lugar exacto onde os quadrados vão aparecer na imagem, o que facilita bastante o problema, visto que não necessitas de andar "à procura" de tais padrões. Algo que não sei se consegues controlar é o tamanho da imagens de input, ou seja, a largura e altura em pixeis. Em todo o caso, podes cortá-las ao teu jeito e de modo a te facilitar a tarefa. Em JAVA, podes ter acesso aos bytes da imagem tal como num ficheiro txt normal, com a classe BufferedImage, assim como à matriz dos pixeis da imagem. Após isso, basta acederes às posições da matriz que identificam a posição dos quadrados e obteres o RBG dos pixeis que identificam os quadrados, e verificando a sua cor, podes inferir sobre o "estado" do quadrado. Se precisares de algo mais sufisticado, dá uma olhadela nos algoritmos de edge detection, nomeadamente aos Operadores de Sobel, que podem ser outra solução. Espero que te seja útil... Um abraço
Knitter Posted April 18, 2009 at 04:28 PM Author Report #257506 Posted April 18, 2009 at 04:28 PM Sim foi bastante útil na medida em que me orientou para o que devo procurar. Vou ver o que consigo fazer com isso, para já não quero mais que testar uma possível implementação.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now