Agenda do Curso
-
O objetivo da disciplina é apresentar os principais conceitos envolvidos na análise e reconhecimento de formas em problemas de visão computacional. A disciplina deverá apresentar, de maneira integrada e conceitual, muitas das técnicas mais avançadas e poderosas para a análise de formas, permitindo que o aluno seja capacitado a testar e usar o material apresentado. Aplicações implementadas em smartphones serão criadas pelos estudantes.
Ementa: https://uspdigital.usp.br/jupiterweb/obterDisciplina?sgldis=MAC0447&codcur=45052&codhab=1 -
Capítulo 1 do Shape analysis.
-
- Crie um Jupyter Notebook que leia uma imagem do Scikit Image, visualize-a e inverta-a de cabeça para baixo. Faça alguns experimentos com diferentes imagens do https://scikit-image.org/docs/stable/api/skimage.data.html#module-skimage.data
- Nesse mesmo JN, faça o plot da n-ésima linha da imagem.
- Calcule a média das linhas e plote.
-
Capítulos 2 e 3 do Shape analysis.
-
Crie um JN que simule os processos de amostragem (espacial) e quantização (radiométrica) em sinais 1D e 2D, conforme explicado em sala de aula. Você deve calcular e realizar a visualização de plot 1D para sinais 1D e visualização de imagens e de superfícies para sinais 2D. Use os seguintes sinais:
- f(t) = sen(t), t em [0,...,2pi) para N pontos. Use dados float e simule a quantização para 10 casas decimais, 5, 3 e 1.
- f(x,t) = sen(t), t em [0,...,2pi), x = [0,..., N), onde N é o número de linhas da imagem. Use dados float e simule a quantização para 10 casas decimais, 5, 3 e 1.
- f(x,y) sejam algumas imagens disponíveis no Scikit Image. Use dados unint8 e simule a quantização para 5 bits, 3, 2 e 1.
Para a amostragem, calcule a média das amostras para reduzir a resolução. No caso 1D, média de vizinhos consecutivos. No caso 2D, média de cada 4 vizinhos. Gere amostragens para resoluções N, N/2, N/4, N/8.
Separe os casos 1D e 2D no JN.
Separe as funções para geraSinal(N,w), amostragem(sinal) e quantizacao(sinal), conforme discutido em aula.
-
Capítulos 2 e 3 do Shape analysis: continuação. Topologia discreta. Transformações de intensidade (operações pontuais). Histogramas.
-
Crie um JN que leia imagens do Scikit Image e aplique transformações de intensidade definidas por:
- T(r) produz o negativo de uma imagem.
- T(r) = r + k, em que k é uma constante inteira. Teste valores crescentes de k. Teste também com valores negativos.
- T(r) = log(r)
- T(r) = exp(r)
Use imagens UINT8. Tome cuidado de verificar os limites mínimo e máximo permitidos por essa representação, saturando os níveis de cinza. Faça a visualização das imagens e dos histogramas respectivos, antes e depois da transformação.
-
-
Convolução
-
Crie um JN que calcule a convolução para os casos definidos pelo produto cartesiano dos sinais e filtros abaixo (ie todos os pares):
Sinais de entrada:
- g(t) = 1, a <= t < b; 0 caso contrário, a,b reais, a<b (janela quadrada)
- g(t) = sin(t) + GaussianNoise(media, desvioPadrao) (seno com ruído gaussiano)
- g(t) = linha de uma imagem do Scikit Image, como feito no 1o exercício do curso.
Filtros:
- h(t) = 1 caso a <= t < b; 0 caso contrário, a,b reais, a<b (janela quadrada)
- h(t) = exp(-t**2) (gaussiana)
- h(t) = -1 caso -a <= t < 0; -1, 1 caso 0 <= t < a; 0 caso contrário, a real (filtro de diferenciação)
-
-
Não teremos aula.
-
Propriedades da convolução e da correlação. Template matching. Casos 2D.
-
Transformada de Fourier. Fourier e convolução. Segmentação de imagens e detecção de bordas.
-
-
-
-
-
Transformada de Fourier. Fourier e convolução. Segmentação de imagens e detecção de bordas.
-
Crie um JN que calcule a convolução f(t) = g(t)*h(t) para os casos definidos pelo produto cartesiano dos sinais g(t) e filtros h(t) abaixo (ie todos os pares). Seu JN deve calcular a convolução no domínio da frequência usando o Teorema da Convolução. Deve também comparar os resultados de f_convolucao(t) e f_fourier(t), em que f_convolucao é a convolução calculada no domínio do tempo e f_fourier é a convolução calculada por meio do Teorema da Convolução.
Faça a visualização das partes reais, imaginárias, módulo e fase das transformadas de Fourier F(w), G(w) e H(w). Não se esqueça de extrair a parte real de f_fourier, pois a IFFT pode produzir ruídos na parte imaginária devido à aritmética de ponto flutuante com números complexos.
Sinais de entrada:
- g(t) = 1, a <= t < b; 0 caso contrário, a,b reais, a<b (janela quadrada)
- g(t) = sin(t) + GaussianNoise(media, desvioPadrao) (seno com ruído gaussiano)
- g(t) = linha de uma imagem do Scikit Image, como feito no 1o exercício do curso.
Filtros:
- h(t) = 1 caso a <= t < b; 0 caso contrário, a,b reais, a<b (janela quadrada)
- h(t) = exp(-t**2) (gaussiana)
- h(t) = -1 caso -a <= t < 0; -1, 1 caso 0 <= t < a; 0 caso contrário, a real (filtro de diferenciação)
-
-
-
Crie um JN que leia as imagens abaixo, estime as orientações preferenciais das retas usando a transformada de Hough e rotacione-as para que as retas fiquem todas horizontais.
-
Entrega e relato em aula da primeira parte do EP: Aplicativo - Aquisição de imagens e formação do dataset.
-
Entrega e relato em aula da primeira parte do EP: Aplicativo - Aquisição de imagens e formação do dataset. Deve-se entregar um pdf nos próprio formato de relatório do Latex indicado no enunciado.
-
-
Entrega e relato em aula da segunda parte do EP: Jupyter Notebook - Processamento, segmentação e aprendizado do classificador.
-
-
-
O enunciado do exercício está no pdf abaixo. O projeto deve ser desenvolvido individualmente. A entrega consiste em um pdf do relatório e um vídeo curto de apresentação dos resultados do projeto postado no YouTube.
-