Чтение файла .pfs, содержащего координаты анатомических структур на рентгенограмме грудной клетки

#matlab

#matlab

Вопрос:

У меня есть файл .pfs, содержащий анатомические структуры на рентгенограмме грудной клетки. Содержимое файла выглядит следующим образом:

 ;
 ; Array sets
 ;
 ; Written on 2002.12.30 (time: 15:06:39) by ??
 ;

{
  [Label=right lung fixed]
  [LineDisplay=0]
  [PointColor=0.000000 1.000000 1.000000]
  [PointDisplay=1]
  [PointMode=Plusses]
  [PointSize=1]
  [PointWidth=6]
  { 380, 76 },
  { 149, 906 },
  { 438, 783 }
},
{
  [Label=left clavicle fixed]
  [LineDisplay=0]
  [PointColor=0.000000 1.000000 1.000000]
  [PointDisplay=1]
  [PointMode=Plusses]
  [PointSize=1]
  [PointWidth=6]
  { 788.211, 98.0585 },
  { 768, 108.538 },  
},

{
  [Label=left clavicle]
  [LineColor=1.000000 1.000000 0.000000]
  [LineDisplay=1]
  [LineMode=OpenContour]
  [PointColor=1.000000 0.000000 0.000000]
  [PointDisplay=1]
  [PointMode=Plusses]
  { 788.211, 98.0585 },
  { 768, 108.538 },
  { 747.789, 116.023 },
  { 726.83, 122.012 },  
}
 

Мне нужно считывать в матрицу только координаты, которые следуют за строкой, содержащей [PointMode=Plusses] . Приведенное выше является лишь частью файла. На самом деле файл содержит 5 наборов приведенного выше текстового шаблона с количеством координат после строки, содержащей [PointMode=Плюсы], различающихся по наборам. Мне нужно прочитать все эти координаты по всем 5 наборам в одну матрицу из 2 столбцов, первый столбец соответствует координате x, а второй столбец соответствует координате y.

Ответ №1:

Это быстрый взлом; он основан на фиксированном расположении в вашем файле и никаких сюрпризов (т. Е. Структур, Которые вы еще не показали в примере).

Итак, поместите следующее в скрипт, измените путь и имя файла на то, что имеет смысл в вашем случае, сохраните и запустите:

     f = fopen('YourPathYourFile.pfs', 'r');

    output = double.empty(0,2);

    while ~feof(f)
            line   = fgetl(f);
            values = sscanf(line, '  { %f, %f},');
            if numel(values == 2)
                    output = [output; values'];
            end;
    end;
    fclose(f);
 

В глобальной рабочей output области будет массив пар (x, y).

Позже код редактирования был исправлен, пожалуйста, проверьте еще раз.