Este trabalho me possibilitou uma ótima experiência de aprendizado, pude trabalhar um pouco com processamento de imagens, pude aprender uma linguagem que não havia tido muito contato C#, entendido um pouco mais sobre formatos das imagens, usei o Visual Studio uma das melhores ferramentas na minha opinião, mas que nem sempre é possível usar nos trabalhos escolares. Também estou tendo a oportunidade de melhorar um pouco meu site pessoal com mais conteúdo. Neste relatório vou mostrar o desenvolvimento e o resultado dos 5 itens pedidos na definição do trabalho. Mas antes gostaria de explicar seu funcionamento e ressaltar que este programa é possivelmente o mais intuitivo de se usar já feito para esta disciplina. Tudo acontece em uma janela auto dimensionável, com todas as opções visíveis para o usuário. Quando você escolhe uma opção ele abre uma janela para que você selecione uma imagem, após selecionar uma imagem ele mostra ela na janela 1 e o resultado da opção escolhida na janela 2. Você pode salvar esta imagem digitando CRTL + S ou simplesmente Arquivo -> Salvar. Para a quantização existe um campo de texto no próprio menu com o número que você deseja escolher, o valor default é 8. O programa funciona com vários tipos de imagens .jpg, .png, .bmp, entretanto ele salva apenas no formato .jpg. O programa também mantém o valor de Alfa das imagens, ou seja, não modifica sua transparência. Ele irá funcionar em qualquer sistema operacional Windows que tenha o net.framework4.0 instalado. Agora o programa também mostra o Histograma, Brilho, Contraste, Negativo e Equaliza a imagem. A interface continua intuitiva no entanto esta pouco prática, mas o objetivo é justamente ver os conceitos de processamento de imagens e não de se vender o software.Então considero que a intuitividade é mais importante que a prática. Para finalizar este super programa ele foi incrementado com funções de Zoom, IN/OUT, Rotação Horária e Anti-Horária. O programa também recebeu filtros para se aplicar nas imagens.
Vejamos abaixo a janela auto dimensionável:
Não alteração do fator alpha (imagem .png):
Ambos espelhamentos foram feitos baseados na troca pixel por pixel, pois a biblioteca usada não tinha uma função que nos desse a linha ou coluna inteira da matriz, se armazenássemos os pixels numa matriz antes de trocar as linhas e colunas seria mais demorado pois teríamos que percorrer todos pixels uma vez de qualquer jeito para poder armazena-los.
Código Fonte:
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);Resultado:
Código Fonte:
pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);Resultado:
Foi utilizado a fórmula para conversão RGB-YCbCr e o valor de Y foi colocado para todos os canais.
Código Fonte:
Bitmap grayScale = new Bitmap(image.Width, image.Height);Resultado:
Dependendo do valor do pixel ele recebe o valor intermediário para o grupo ao qual ele pertence, o número de grupos depende do usuário que pode escolher de 1 a 256. Se ele escolher 1 a imagem vai ficar toda cinza se escolher 256 não haverá nenhuma alteração.
Código Fonte:
tryResultado para 8 tons:
Resultado para 2 tons:
Resultado para 2 tons sobre imagem colorida:
A opção salvar esta disponível e pelo que vi toda vez que salvamos um .jpg ele perde qualidade, pois é aplicada algum tipo de compreensão. Mas no meu caso o como eu recupero todos os pixels e depois salvo de novo e provavelmente minha biblioteca não esta realizando a melhor compressão o tamanho das imagens aumenta. Num teste inicial eu apenas copiei o conteúdo de um arquivo de imagem para outro arquivo neste caso como era de se esperar o tamanho se manteve o mesmo.
A imagem é convertida para tons de cinza usando a função do trabalho anterior só que agora o valor dos tons de cinza são postos em um vetor que é passado ao novo formulário que irá exibir o histograma.
Código Fonte:
Resultado:
Veja que o histograma também é dimensionável:
Código Fonte:
Resultado: (Alterando o brilho do canal Vermelho)
Código Fonte:
Resultado:
Código Fonte:
Resultado:
É realizado a contagem dos tons de red, blue e green para a imagem, encima deles é aplicado a fórmula fornecida em sala de aula, para gerar o novo histograma de cores red, blue e green. Nós gráficos o que é mostrado é o histograma de escalas de cinza apenas
Código Fonte:
Resultado:
O usuário deve passar como entrada o tamanho da nova imagem a ser gerada, o programa calcula os fatores, é interessante que a nova imagem tenha suas dimensões divisores das dimensões originais, isto gera fatores inteiros e a redução é perfeita, do contrário a imagem poderá sofre um pequeno corte, para se evitar esse corte poderia se ter usado uma abordagem matemática considerando fatores racionais, mas por simplicidade de programação foi usado fatores inteiros.
Código Fonte:
Resultado:
Você deve salvar a imagem e ver seu tamanho reduzido no diretório, pois o software redimensiona ela para caber no "picture box", mas é possível ver como ela perde qualidade em função da diminuição da resolução.
Código Fonte:
Resultado:
É feita a rotação onde os pixels são deslocados para posição oposta ao qual estão em sua linha ou coluna. Para aplicar mais de uma rotação salve a imagem e execute de novo.
Código Fonte:
Resultado:
Os filtros são aplicados segundo o código fonte abaixo, a única mudança são os valores da convolação e o somar 127 para os filtros de relevo. As linhas e colunas das bordas são desprezadas na aplicação do filtro e seu valor permanece o mesmo.
Código Fonte:
Resultados:
Pude trabalhar vários conceitos, fazer um programa divertido, usar aquilo que eu julgo o melhor para trabalhar com software. Enfim usei muitos conhecimentos que aprendi durante a faculdade, foi realmente muito bom este trabalho e prazeroso.