Blaaaaaaaa
Por: louceiro • 21/6/2015 • Trabalho acadêmico • 1.761 Palavras (8 Páginas) • 211 Visualizações
%- Função leImagem: recebe como parâmetros a string tipoArquivo e a
%- string caminho para exibição de uma janela e
%- seleção de um arquivo. Se a string caminho não é
%- fornecida, então considera-se o diretório
%- corrente. Retorna a matriz numérica I correspondente
%- Ã imagem e, se for imagem indexada, o mapa de cores
%- Map
%- Autores: Caio, Eduardo, Eude e Yara
%- Data: 22/05/2012
function [I, Map] = leImagem(tipoArquivo, caminho)
% Exibe janela e seleciona arquivo
if exist('caminho', 'var')
% Se caminho foi informado
[nomeArquivo, caminhoArquivo] = selecionaArquivo(tipoArquivo, caminho);
else % caminho não foi informado
[nomeArquivo, caminhoArquivo] = selecionaArquivo(tipoArquivo);
end;
if isequal(nomeArquivo, 0) || isequal(caminhoArquivo, 0)
I = []; Map = [];
return;
end;
% Monta o nome completo do arquivo
caminhoNomeArquivo = fullfile(caminhoArquivo, nomeArquivo);
% Lê conforme o tipo de arquivo
tipoArquivoSelecionado = upper(slSubStr(nomeArquivo, -4, 4));
if strcmp(tipoArquivoSelecionado, '.IMG')
% disp('Essa função ainda não reconhece imagens tipo .img');
% I = []; Map = [];
% Monta nome de arquivo substituindo .img por .hdr
caminhoNomeArquivoHDR = strrep(caminhoNomeArquivo, '.img', '.hdr');
% Abre arquivo .hdr correspondente
fid = fopen(caminhoNomeArquivoHDR, 'r');
if fid == -1
error('Erro: arquivo .hdr não pôde ser aberto');
end;
% Determina parâmetros para leitura multibanda
linha = fgetl(fid);
qtdeLinhas = [];
qtdeColunas = [];
qtdeBandas = [];
tipoDN = [];
tipoArquivo = [];
offSet = [];
byteOrder = [];
while ~ feof(fid)
if isempty(qtdeLinhas)
qtdeLinhas = sscanf(linha, 'lines =%u');
end;
if isempty(qtdeColunas)
qtdeColunas = sscanf(linha, 'samples =%u');
end;
if isempty(qtdeBandas)
qtdeBandas = sscanf(linha, 'bands =%u');
end;
if isempty(tipoDN)
tipoDN = sscanf(linha, 'data type =%u');
end;
if isempty(tipoArquivo)
tipoArquivo = sscanf(linha, 'interleave =%s');
end;
if isempty(offSet)
offSet = sscanf(linha, 'header offset =%u');
end;
if isempty(byteOrder)
byteOrder = sscanf(linha, 'byte order =%u');
end;
linha = fgetl(fid);
end;
% Converte parâmetro tipoDN para parâmetro precisao da função
% multibandread
switch tipoDN
case 1
precisao = 'int8';
case 2
precisao = 'int16';
case 3
precisao = 'int32';
case 4
precisao = 'float32';
case 5
precisao = 'float64';
case 12
precisao = 'uint16';
...