Aquisição de imagens do sojourner (Parte 02/02)

Continuação – http://rishivadher.blogspot.pt/2014/04/aquisicao-de-imagens-do-sojourner-parte.HTML
4 Modo de utilização do programa
O programa não necessita de instalação pois consiste num conjunto de códigos que irão ser lidos pelo interpretador MATLAB.
Para inicializar o programa, deve-se inicializar o interpretador Matlab e na área denominada Current Folder (localizada em cima ao centro) o utilizador deve procurar e seleccionar a pasta chamada ‘Analise_de_missoes’, como se vê na IMAGEM09
localizar
IMAGEM09
O programa executa análises a um conjunto de ficheiros ASCII com extensão .tab extraídos de base de dados on-line da agência aeroespacial NASA através do seguinte endereço: http://geo.pds.nasa.gov/missions/mpf/imp3d.html no link Data directory’.
Estes ficheiros a analisar deverão ser colocados na pasta ‘Analise_de_missoes’, só devem ser colocados nessa pasta os ficheiros ASCII retirados da base de dados da NASA, estes ficheiros nunca deverão ser adulterados. Para começar a correr o programa, o utilizador deve escreve na Command Window: ‘analiseMissoes’ e primir a tecla enter.
Ao iniciar o programa será apresentada ao utilizador um menu, como se vê na IMAGEM10 a aparência do menu principal;

IMAGEM10
Caso o utilizador escolha a opção 4 será apresentado o submenu como se vê na IMAGEM11;
submenu04
IMAGEM11
Para operar o programa basta seguir as indicações que vão aparecendo no ecrã, o utilizador apenas necessita de intruduzir o/os caractere/s pretendidos e primir a tecla enter.
Quando o utilizador visionar a palavra busy no canto inferior esquerdo do ambiente de trabalho, não deve introduzir nada no ecrã nem mexer no ambiente de trabalho, pois isso pode interferir com os processos a serem realizados no momento pelo programa.
Quando o utilizador pretender utilizar a opção 4 do menu principal, tem obrigatoriamente que executar a opção 2 primeiro. Quando o utilizador pretender utilizar a opção 4.2, tem obrigatoriamente que executar a opção 4.1.
O utilizador poderá consultar sempre que quiser o nome dos ficheiros das missões já analisados, a sua data, o seu factor de prioridade e a distância da câmara ao ponto de menor luminosidade. Para isto, basta aceder á pasta ‘Analise_de_missoes’ e abrir o ficheiro de extensão .dat com o nome ‘missoes_analisadas.dat’
Após a publicação do relatório em extensão .html o utilizador terá de ir à pasta denominada ‘Analise_de_missoes’ e abrir a pasta com o nome ‘html’, lá dentro encontrará os relatórios já publicados pelo interpretador MATLAB, para os visualizar basta clicar duas vezes no relatório a abrir e ficheiro será aberto com o Internet Explorer.
Para abandonar correctamente o programa, o utilizador deverá selecionar a opção 0 no menu principal e confirmar a intenção de saída, só depois é que poderá fechar a janela do interpretador MATLAB. Sair do programa sem selecionar a opção 0 e confirmar a saída resulta na perda das análises feitas aos ficheiros ASCII durante a execução do programa que não tenham sido publicadas no ficheiro relatório.m
5 Implementação na linguagem de programação
O programa está estruturado do seguinte modo: => analiseMissoes.m
● ler_missoes.m
● opcao_1.m
● escreverficheiro.m
● opcao_2.m
● apagarmissoes.m
§ processadata
§ removemissoes
§ comparadatas
§ filtrapornome
§ filtrapordata
● mostrar_missoes_4.m
● limitar_missoes_4.m
● escreve_relatorio.m
● gravarficheiro.m
O módulo principal do programa, designado analiseMissoes.m começa por abrir o ficheiro missoes_analisadas.dat, que contém o nome e data dos ficheiros das missões já analisadas, com informação ordenada da distância da câmera ao ponto de menor intensidade, da luminosidade desse ponto e do factor de prioridade da missão. Para abrir este ficheiro o programa chama a função criada ler_missoes (ler_missoes.m), sem argumentos de entrada e com um argumento de saída designado ‘missoes’. Dentro deste módulo, o programa abre o ficheiro (se ele existir, caso contrário vai retornar o argumento ‘missoes’ como sendo uma variável struct vazia). Depois da abertura correcta do ficheiro através do comando ‘fopen’ com a permissão ‘rt’, este vai lê-lo linha-a-linha, usando o comando ‘fgetl’. A função ler_missoes ordena a variável ‘missoes’ numa estrutura com vários campos associados conforme supramencionado, convertendo-as em representação MATLAB.
Após a abertura do ficheiro, o programa mostra o menu principal e pede ao utilizador que selecione a opção pretendida, o código do menu principal que consiste num ciclo while e um comando switch com um caso para cada opção do menu.
Opção 1:
Caso o utilizador seleccione a opção 1 (cujo objectivo é analisar um ficheiro de dados), o programa executa a função denominada ‘opcao_1’ (opção1.m), sem argumentos de entrada e com um argumento de saída chamado ‘missoes’. Dentro deste módulo, o programa apresenta no ecrã os nomes dos ficheiros de extensão .tab que estão na pasta ‘Analise_de_missoes’ e associá-los a um código numérico usando o comando dir, em seguida o programa vai pedir ao utilizador o número do código associado ao ficheiro que quer analisar, agora, o programa vai abrir o ficheiro seleccionado através do comando fopen e vai lê-lo linha-a-linha, o programa vai mostrar no ecrã duas linhas específicas do ficheiro .tab usando o comando contador. Para ler as linhas correspondentes à matriz da imagem, o programa vai reiniciar o contador onde as linhas começam e vai analisá-las usando o comando fgetl (a linha corrspondente à coordenada espacial Z não vai ser lida pois não terá qualquer influência nos cálculos feitos mais à frente), em seguida vai criar uma matriz C que contém três colunas, as coordenadas x,y nas duas primeiras e o valor da intensidade do ponto com essas coordenadas na terceira. O programa vai encontrar o ponto de menor intensidade através da comparação entre todos os pontos e vai ser guardada uma variável que contém a intensidade do ponto menos luminoso (é preciso definir um valor máximo para a intensidade mínima antes de iniciar a comparação, neste caso foi 15000), vão ser criadas outras duas variáveis que contêm as coordenadas x,y de menor luminosidade. Em seguida vai ser calculada a distância da câmera ao ponto no plano usando as coordenadas x,y do ponto e fazendo oseu escalar. O factor de prioridade da missão também vai ser calculado usando as coordenas x,ye o valor da luminosidade do ponto. Por fim, este módulo vai apresentar a imagem correspondente à matriz C usando o comando image e vai traçar uma linha sobre a imagem desde a câmera até ao ponto menos luminoso e marcá-lo com um círculo à volta usando o comando line e o comando plot com as coordenadas do ponto seguidas de ‘o’ para assinalar o ponto na imagem com um círculo.
Após correr a função opcao_ 1.m, o módulo principal vai receber o argumento ‘missoes’ e associá-lo ao argumento ‘missoes_novo’ que corresponde a uma struct que contém as variáves distância, valor da intensidade mínima, factor de prioridade e nome do ficheiro analisado. Após criar o argumento ‘missoes_novo’, o programa vai chamar a função escreverficheiros.m que tem como argumentos de entrada ‘missoes_novo’ e ‘missoes’. Esta função vai receber o ficheiro correspondente à missão analisada através do argumento ‘missoes_novo’ e os restantes ficheiros contidos no ficheiro missoes_analisadas.dat através do argumento ‘missoes’, caso o ficheiro da missão acabada de analisar seja igual a outro ficheiro já existente, o programa vai dar-lhes a mesma posição dentro do ficheiro .dat, ou seja, vai desprezar a nova analise pois ela já existe dentro do ficheiro missoes_analisadas.dat. Caso a nova análise não esteja repetida, o programa vai guarda-la com informações sobre a distância ao ponto de menor luminosidade, o valor da sua luminosidade, o factor de prioridade, o nome do ficheiro analisado e a data da sua analise, tendo ‘missoes’ já com a nova analise como argumento de saída.
Sempre que o utilizador selecione a opção 1, o programa vai analisar o ficheiro escolhido e colocar os resultados da su analise no ficheiro missoes_analisadas.dat.
Será agora apresentado ao utilizador o menu principal e pedida a opção pretendida.
Opção 2:
Caso o utilizador seleccione a opção2 (cujo objectivo é apresentar a lista de missões por factor de prioridade mínima) , o programa chama a função opcao_2.m. o programa executa a função opção2 sem argumentos de saída e com um argumento de entrada ‘missoes’. Imprime cabeçalho no ecrã e percorre através de ciclo for a variável missoes para o campo factor_prioridade (FP). Através de um ciclo, se o valor seguinte for superior ao valor anteriormente encontrado, a função organiza as posições, ordena as ‘missoes’ e por fim apresenta-as no ecrã conforme formato pre-definido, com os campos factor_prioridade, distancia, intensidade_min, nome e data.
Após apresentar a lista de missões por factor de prioridade decrescente, o programa volta a apresentar o menu prinicipal e pede ao utilizador que escolha uma das opções.
Opção 3:
Caso o utilizador escolha a opção 3, o programa chama a função apagarmissoes.m, que tem como argumento de entrada ‘missões’, ou seja, a lista das missões analisadas até à data. O argumento ‘missoes’ volta a ser o argumento de saída mas desta vez já sem as missões que foram apagadas.
Dentro da função apagarmissoes.m, a nossa função “mae” desta opção 3, o programa começa por pedir ao utilizador uma data ou parte do nome de um ficheiro e chama a função processadata, que tem como argumento de entrada ‘d_min’, ou seja, os caracteres introduzidos pelo utilizador, e como argumento de saída ‘dmin’. Esta função vai analisar a data introduzida e averiguar se esta possui o formato específico de data. Este processo começa por dividir em 3 partes a cadeia de caracteres introduzido (dia, mês, ano) e analisa-os em separado. Se pelo menos uma delas nao corresponder ao formato, a função retorna o valor -1, ou seja, nao reconhece como data.
Caso o utilizador escreva caracteres que não correspondam a uma data, o programa chama a função filtrapornome. Esta função tem como argumentos de entrada ‘missoes’ e ‘nome’, ou seja a lista de missões e os caracteres introduzidos pelo utilizador. Para além dos argumentos de entrada também tem um argumento de saída ‘rmissoes’, que corresponde às missoes a remover. Esta função reconhece qual o ficheiro a apagar e guarda a sua posição na variável ‘rmissoes’. Caso os caracteres introduzidos não correspondam a nenhum ficheiro, a função devolve ‘rmissoes’ como vazio e a funcao principal é executada de novo, pedindo novamente um valor de data mínimo (data_min) ao utilizador.
Caso o utilizador introduza uma data, o programa pede outra data e vai chamar a função processadata, esta função tem como argumentos de entrada ‘d_max’, a nova data introduzida pelo utilizador, e ‘dmax’ como argumento de saída. Esta função compara as duas datas introduzidas pelo utilizador recorrendo à função comparadatas. Esta função tem como argumentos de entrada ‘dmin’ e ‘dmax’, ou seja, as duas datas introduzidas pelo utilizador e ‘comparacao’ como argumento de saída, no caso destas estarem pela ordem correcta, a função retorna ‘comparacao’ como sendo igual a -1 ou 0, se a data introduzida posteriormente for mais antiga que a primeira, ‘comparacao’ é retornada como sendo igual a 1 e o módulo processadata pede a introdução de outro extremo para a data. Caso o utilizador introduza as datas correctamente, o programa chama a função filtrapordata, que tem ‘missoes’, ‘dmin’ e ‘dmax’ como argumentos de entrada e ‘rmissoes’ como argumento de saída. Esta função irá ler as datas das missões já analisadas, e vai escolher apenas os ficheiros com datas que satisfazem o intervalo introduzido pelo utilizador. Se nao existirem datas de missoes nesse intervalo, a função retorna o argumento ‘rmissoes’ como vazio.
Após isto, será executada a função removemissoes, que irá receber o argumento ‘missoes’ e o argumento ‘rmissoes’, e subtraí-los. Isto significa, que a função ira tirar ao argumento ‘missoes’ todas as missões contidas em ‘rmissoes’(ou seja, aquelas que queremos eliminar), ficando apenas com as missões que o utilizador nao queria remover.
Por fim, a função principal processadata, irá ler a função removemissoes e irá pedir ao utilizador se ele deseja confirmar as missões a apagar. Se tal acontecer,a função principal remove do ficheiro missoes_analisadas.dat as missões que se pretende apagar e volta ao menu principal.
Opção 4
Caso o utilizador escolha a opção 4 será apresentado o submenu e pedido ao utilizador que escolha uma entre três opções com códigos numéricos associados. (1 – Limitar lista de missões por prioridade mínima; 2 – Gerar relatório; 0 – Voltar ao menu principal:), conforme apresentado na fig. 3.. O código do submenu consiste num ciclo while e num comando switch com um caso para cada opção. Em cada um dos três casos, está o código numérico associado (1,2,0) que o utilizador deverá introduzir. Caso contrário, o programa regressa ao menu principal e transmite mensagem através do Command View de ‘Opção Não válida’. (para mais informação ver opções do submenu).
Opções do Submenu
Tal como o menu principal, o submenu consiste num ciclo while e num comando switch com um caso para cada uma das opções.
Se o utilizador escolher a opção 1 do submenu (cujo o objectivo é limitar a lista de missões analisadas a incluir no relatório por factor mínimo de prioridade), o programa vai chamar a função limitar_missoes_4 (através do ficheiro limitar_missoes_4.m). Esta funçao tem como argumento de entrada ‘missoes’ que contem a lista de todas as missoes já analisadas menos as removidas na opção 3. Nesta opção vão ser escolhidos os ficheiros a apresentar no relatório. Inicialmente, ao executar a função é pedido ao utilizador a introdução de valor mínimo do factor de prioridade pretendido para as missoes analisadas (‘missoes’) a incluir no relatório. Após a introdução de valor (fp_pretendida), o programa compara o factor de prioridade das missões existentes com o valor introduzido. Por fim, o módulo apresenta no ecrã as missões ordenadas por factor de prioridade decrescente como na opção 2 menos aquelas missões que têm um factor de prioridade inferior ao introduzido pelo utilizador.
Se o utilizador pretender escolher a opção 2 do submenu (cujo o objectivo é gerar um relatório das missões analisadas, já reordenadas ou limitadas por fp_pretendida), o programa cria e publica um relatório das missões analisadas recorrendo à função relatorio.m, esta função não tem argumentos de saída e tem ‘missoes2’ como argumento de entrada como com cabeçalho pré-definido num ficheiro formato .html. Este relatório segue formato pré-definido no caderno de encargos é pre-definido através da função publish existente no MATLAB. Para acesso a esse relatório, o utilizador deverá aceder à pasta .html existente no directório conforme especificado em 1 (Modo de utilização do programa). Depois de gerado o relatório, o programa regressa ao submenu.
Por último, se o utilizador pretender introduzir a opção 0 do submenu, o programa regressa ao Menu Principal, utilizando o comando break para sair do ciclo while que se encontra dentro do case correspondente à opção 4.
Fecho
Quando o utilizador escolhe a opção 0 do menu principal o programa pede a confirmação de saída ao utilizador, caso o utilizador cancele a intenção de saída do progrma através da caracter ‘n’ ou ‘N’, o programa volta a apresentar ao menu principal . Caso o utilizador introduza o caracter ‘s’ ou ‘S’, o programa irá chamar a função gravarficheiro.m, esta função tem como argumento de entrada ‘missoes’, esta função grava o conteúdo do ficheiro missoes_analisadas.dat actualizado após cada execução do programa. Após a execução deste módulo, o programa termina, usando o comando break para o efeito.
6 Conclusões e recomendações
Neste programa todas as funcoes e opções são implementadas com sucesso, contudo, existem algumas restrições ao seu funcionamento como por exemplo o facto de haver uma ordem obrigatória para a execução de duas das opções. Apesar deste percalço, isto não deverá causar qualquer problema ao utilizador do programa.
Durante a execução da análise e durante a publicação do relatório o programa demora alguns
segundos a apresentar a imagem, o processo poderia ser mais rápidos se fossem usados outros
comandos mais complexos que não denominamos tão bem.
Concluindo, este programa corresponde a todas as necessidades do utilizador e conseguiu um
bom desempenho em todos nossos testes.
Testes ao programa
Teste à opção 1 como se vê na IMAGEM12;
imagem
IMAGEM12
Teste à opção 2 como se vê na IMAGEM13;
opção02
IMAGEM13
Testes à opção 3 como se vê na IMAGEM14;
opção remover
IMAGEM14
Testes à opção do submenu 1 da opção 4 como se vê na IMAGEM15;
opção 4.1
IMAGEM15
Testes à opção do submenu 2 da opção 4 como se vê na IMAGEM16;

IMAGEM16
O teste da opção do submenu 2 da opção 4 gera o relatório em html que se vê na IMAGEM17;
opção 4.2
IMAGEM17
Teste à opção 0 para terminar o programa com o submenu “S/N” que se vê na IMAGEM19:
IMAGEM19
Abaixo está o respectivos ficheiros para poderem ser utilizados ou modificados caso seja necessário, para o programa poder correr, devem de ser descarados os ficheiros .tab de http://pds-geosciences.wustl.edu/mpf/mpfl-m-imp-5-3dposition-v1/mpim_2xxx/data, assim como criar um ficheiro vazio com o seguinte nome “ missoes_analisadas.dat” e com a extensão referida .dat.
escreve_relatorio.m

escreverficheiros

gravarficheiro.m

ler_missoes.m

limitar_missoes_4.m

mostrar_missoes_4.m

opcao_1

opcao_2

analiseMissoes.m

apagarmissoes.m

Enviar um comentário