MATLAB nas aulas de Percepção – Exercícios Introdutórios
1 de agosto de 2026
O MATLAB tem-se assumido como uma importante ferramenta na investigação científica sendo, por isso, desejável a sua introdução precoce no âmbito de um curso universitário. Acresce que, no caso específico (ainda que, obviamente, não exclusivamente) do ensino de Psicologia da Percepção, esse possibilita uma exploração activa por parte dos alunos de princípios básicos, num nível que dificilmente poderia ser alcançado com recurso a estratégias pedagógicas tradicionais.
Por outro lado, e dados os requisitos de entrada na licenciatura em Psicologia (pelo menos no contexto Português), não é expectável que um aluno típico tenha competências de programação suficientes para que a adaptação ao ambiente MATLAB seja imediata ou, pelo menos, facilmente acessível. Longe de constituir um obstáculo intransponível, este facto apenas convida a que o uso do MATLAB prioritize uma ligação clara aos conteúdos programáticos, relegando para segundo plano uma aprendizagem plena da sua sintaxe de programação, e ainda que sacrificando alguma eficiência computacional a favor de uma maior transparência dos procedimentos.
Os exercícios que se seguem constituem o primeiro contacto com o MATLAB nas minhas aulas, inseridos nos tópicos iniciais sobre Visão e Percepção da Cor – consequentemente, o primeiro concretiza de forma interactiva noções elementares de misturas aditiva de cores (com base na luz emitida pelo ecrã; uma breve explicação prévia do hardware subjacente é recomendada) e permite uma concretização da noção de cores metaméricas bem como de alguns aspectos da Teoria de Helmholtz-Young (ou Teoria Tricromática); o segundo e terceiro expandem essas noções recorrendo a fotografias (para maior envolvimento, os alunos podem ser convidados a usar fotografias suas). Estes exercícios foram adaptados a partir daqueles propostos no capítulo 8 de Wallisch et al (2014), pese embora consideravelmente simplificados para maior alcance pedagógico. Estes podem ser executados por alunos, com ou sem tutoria, ou adaptados como um script (bastando copiar e colar todos os comandos que se seguem num novo script e, após guardar o ficheiro, executá-lo) para correr em aula pelo professor, pelos alunos, ou ambos (esta possibilidade oferece a vantagem de ocupar menos tempo de uma aula, pese embora com o preço de minimizar o contacto com o MATLAB).
Preliminar
Os exercícios 2 e 3 requerem o Add-On 'Image Processing Toolbox', facilmente instalável a partir do Explorador de Add-Ons do MATLAB. Este Addo-On é particularmente útil para exercícios com recurso a MATLAB numa unidade curricular que cubra tópicos sobre percepção.
Exercício 1 – Sistema RGB e a mistura aditiva de cores
Comece-se por executar os seguintes comandos na janela de comandos do MATLAB. Estes especificam tão-somente o valor de três variáveis (R, G, e B). Neste caso, esses valores irão representar, em bytes, a intensidade de cada um dos três canais no sistema RGB (R = vermelho; G = verde; B = azul). Os valores específicos podem e devem ser variados. Um valor de 127 em todos os canais resultará num cinzento médio; valores iguais em todos os canais mas mais altos/baixos que 127 resultarão em cinzentos mais claros/escuros; valores de 0 ou 255 em todos os canais resultará em branco ou preto, respectivamente; finalmente, valores variados em cada um dos três canais resultarão numa qualquer tonalidade possível (a experimentação autónoma, executando várias vezes o presente exercício, deve ser aqui altamente incentivada).
R = 127; % Valor do canal vermelho ([R]ed), em bytes (entre 0 e 255)
G = 127; % Valor do canal verde ([G]reen), em bytes (entre 0 e 255)
B = 127; % Valor do canal azul ([B]lue), em bytes (entre 0 e 255)
Uma vez definidos os valores dos canais R, G, e B, estes devem agora ser combinados numa mesma área do ecrã. Para tal, começa-se por definir uma matriz 3 (dimensão horizontal) × 3 (dimensão vertical) × 3 (número de canais) que, inicialmente, possui apenas 0s:
matriz = zeros(3,3,3); % Criar matriz 3×3×3 com 0s
Para que esta matriz venha a ser correctamente interpretada como valores RGB deve ser convertida para uint8 (8-bit unsigned integer arrays):
matriz = uint8(matriz); % Converter a matriz para uint8
Resta agora atribuir os valores R, G, e B aos respectivos canais desta matriz (isto é, a sua terceira dimensão). Para que a tonalidade gerada possa ser facilmente discernível, apenas se fará esta atribuição para o valor central nas dimensões horizontal e vertical (as restantes células, disposta à volta dessa célula central, manterão o valor de 0 e, logo, resultarão numa zona preta):
matriz(2,2,1) = R; % Atribuir o valor do canal vermelho (R)
matriz(2,2,2) = G; % Atribuir o valor do canal verde (G)
matriz(2,2,3) = B; % Atribuir o valor do canal azul (B)
Finalmente, para visualizar o resultado, basta executar o comando seguinte:
image(matriz) % Ver matriz como imagem
Como se disse atrás, todo o exercício pode e deve ser repetido com valores variados de R, G, e B.
Exercício 2 – Separar os canais RGB de uma fotografia digital
Começa-se por ler e importar uma imagem digital sob a forma de uma matriz para o ambiente MATLAB, substituindo no comando que se segue "nome" pelo nome do ficheiro (este deve ser colocado na pasta activa do MATLAB) e "extensão" pela extensão do tipo de ficheiro (e.g., jpg, png):
Foto = imread('nome.extensão'); % Importar imagem como matriz
Porque cada um dos canais (R, G, e B) da imagem original serão isolados dessa, devem-se criar previamente matrizes que possam conter esses valores. Para tal, devem-se criar três novas matrizes, uma para cada canal RGB, com as mesmas dimensões horizontal e vertical da imagem original e constituídas originalmente por 0s:
CanalR = zeros(size(Foto,1),size(Foto,2),3); % Criar matriz 'CanalR' com as mesmas dimensões horizontal e vertical que a matriz 'Foto'
CanalG = zeros(size(Foto,1),size(Foto,2),3); % Criar matriz 'CanalG' com as mesmas dimensões horizontal e vertical que a matriz 'Foto'
CanalB = zeros(size(Foto,1),size(Foto,2),3); % Criar matriz 'CanalB' com as mesmas dimensões horizontal e vertical que a matriz 'Foto'
Agora, cada um dos três canais RGB da imagem original podem ser copiados para cada uma das respectivas matrizes (as quais devem, adicionalmente, ser convertidas para uint8):
CanalR(:,:,1) = Foto(:,:,1); % Copiar valores da primeira camada da terceira dimensão (canal R) da foto para a respectiva camada da matriz CanalR
CanalR = uint8(CanalR); % Converter para uint8
CanalG(:,:,2) = Foto(:,:,2); % Copiar valores da segunda camada da terceira dimensão (canal G) da foto para a respectiva camada da matriz CanalG
CanalG = uint8(CanalG); % Converter para uint8
CanalB(:,:,3) = Foto(:,:,3); % Copiar valores da terceira camada da terceira dimensão (canal B) da foto para a respectiva camada da matriz CanalB
CanalB = uint8(CanalB); % Converter para uint8
Por fim, para se poder ver tanto a imagem original como cada um dos canais constituintes (vermelho [R], verde [G], e azul [B]), pode-se recorrer à função "subplot":
figure; % Abrir uma figura
subplot(2,2,1); % Numa grelha de 2 × 2 paineis seleccionar o primeiro desses
image(Foto) % No painel seleccionado, representar a fotografia original
subplot(2,2,2); % Numa grelha de 2 × 2 paineis seleccionar o segundo desses
image(CanalR) % No painel seleccionado, representar a matriz CanalR
subplot(2,2,3); % Numa grelha de 2 × 2 paineis seleccionar o terceiro desses
image(CanalG) % No painel seleccionado, representar a matriz CanalG
subplot(2,2,4); % Numa grelha de 2 × 2 paineis seleccionar o quarto desses
image(CanalB) % No painel seleccionado, representar a matriz CanalB
O resultado deverá ser algo parecido com a Figura 1.
Exercício 3 – Remover, de uma fotografia digital, cada um dos três canais RGB
Este exercício é, num certo sentido, complementar do anterior – ao invés de se isolar cada um dos canais RGB, esses serão selectivamente removidos da fotografia original. O resultado serão três novas imagens: uma sem o canal vermelho (somente com os canais verde e azul), outra sem o canal verde (somente com os canais vermelho e azul), e uma sem o canal azul (somente com os canais vermelho e verde). Um aspecto interessante deste exercício é que simula o que se poderia esperar dos diferentes tipos de dicromacia (Protanopia, Deuteranopia, e Tritanopia) apenas com base na Teoria de Helmholtz-Young – importa enfatizar que, na realidade, as dicromacias não se assemelham ao resultado deste exercício (uma simulação da percepção das cores nas dicromacias, ainda que de uma forma grosseira, pode ser encontrada neste outro tutorial). Estas observações constituem uma importante base para relacionar mais directamente os presentes exercícios com os conteúdos programáticos de uma unidade curricular sobre percepção, podendo constituir um bom ponto de partida para uma apresentação formal da Teoria dos Canais Oponentes de Ewald Hering.
Assim, e à semelhança do exercício anterior, começa-se por importar uma qualquer imagem (uma vez mais, deve-se substituir os termos "nome" e "extensão" pelo nome e extensão do ficheiro correspondente). Adicionalmente, cria-se também uma matriz constituída apenas por 0s com as mesmas dimensões que a fotografia importada:
Foto = imread('nome.extensão'); % Importar imagem como matriz
Zeros = zeros(size(Foto,1),size(Foto,2),3); % Criar a matriz "Zeros" com as mesmas dimensões que a fotografia original
De seguida, e para um dos casos em que se exclui um dos canais (R, G, e B), deve-se gerar uma matriz correspondente. De início, essa matriz será apenas uma cópia da fotografia original. No passo seguinte, o canal que se pretente excluir é simplesmente substituído pelo seu equivalente da matriz 'Zeros'. Finalmente, cada uma dessas matrizes é convertida para uint8:
% Imagem SEM canal vermelho (R):
xGB = Foto;
xGB(:,:,1) = Zeros(:,:,1);
xGB = uint8(xGB);
% Imagem SEM canal verde (G):
RxB = Foto;
RxB(:,:,2) = Zeros(:,:,2);
RxB = uint8(RxB);
% Imagem SEM canal azul (B):
RGx = Foto;
RGx(:,:,3) = Zeros(:,:,3);
RGx = uint8(RGx);
Por fim, e à semelhança do que se fez no exercício 2, os resultados são representados numa grelha de 2 × 2 painéis:
figure;
subplot(2,2,1);
image(Foto)
subplot(2,2,2);
image(xGB)
subplot(2,2,3);
image(RxB)
subplot(2,2,4);
image(RGx)
O resultado final deverá ser similar aquele mostrado na Figura 2.
Bibliografia
- Wallisch, P., Lusignam, M. E., Benayoun, M. D., Baker, T. I., Dickey, A. S., & Hatsopoulos, N. G. (2014). MATLAB for Neuroscientists: An Introduction to Scientific Computing in MATLAB (2nd Ed.). Elsevier Academic Press.