Виктор Кон -- (29-03-2022) -- http://kohnvict.narod.ru
1. ВВЕДЕНИЕ
Компьютерная томография -- это очень хорошо разработанная и широко используемая техника обработки рентгеновских данных по поглощению в разных материалах. Есть разные варианты, но наиболее широко применяется томография в параллельном пучке, который просвечивает образец насквозь и записывается зависимость поглощения излучения в материале, то есть кривая интенсивности, которая затем пересчитывется в толщину материала под пучком при данной ориентации. В процессе сбора данных образец крутится на 180 градусов с постоянным шагом, тем самым набирается система файлов в tiff формате, каждый файл соответствует одному углу, а в нем записана картинка проекции образца при заданном угле. Для томограммы выбирается горизонтальная линия картинки, а число пикселей по вертикали на картинке дают такое же число томограмм. Основной расчет, таким образом, состоит из двух этапов. Сначала из всех проекций выбирается одна горизонтальная линия и строится синограмма, то есть матрица размером N*M, где N -- число пикселей в одной проекции, M -- число углов. А потом из синограммы вычисляется томограмма. Это и есть самый главный расчет в программе, который отнимает больше всего времени.
Если вычислять сразу много томограмм в цикле, то расчет может занять много времени. Поэтому, кроме самого расчета есть операции анализа и просмотра результатов расчета, а также входных данных. Это необходимо как для получения реальных результатов, так и при выборе оптимальных параметров и планировании большого расчета. Программа создавалась в несколько этапов и имеет не вполне стандартный вид. Первонально все делалось одной операцией. Но в какой-то момент основная операция была заморожена и дополнительные операции сделаны в другом стиле, как элементы главного меню надстройки над основной программой. По этой причине ниже сначала описывается надстройка, а потом основной блок.
2. ГЛАВНОЕ МЕНЮ ПРОГРАММЫ
Главное меню программы показано на картинке справа. Оно содержит несколько кнопок, запускающих разные варианты работы программы. Варианты также можно запускать по горячим клавишам, обычно это номера, а затем буквы латинского алфавита. Кнопка номер 1 показывает этот текст. Кнопка номер 2 запускает основной расчетный модуль. Кнопка номер 3 быстро показывает результаты в режиме отладки и учебы, когда просматривается только один уровень по вертикали. Сам расчетный модуль ничего не показывает, а только записывает файлы. Она имеет свое меню и подсказки что делается в каждой операции. Кнопка номер 4 запускает меню дополнительной работы в данными в файлах. Здесь уже можно указывать много файлов, которые обрабатываются в цикле. Она снова имеет свое меню и подсказки что делается в каждой операции. Кнопка номер 5 делает картинку для клипа. Кнопка номер 6 зарезервирована для преобразования поекций в tiff формат, если они были записаны в другом формате.
Основной расчетный модуль будет описан далее. Рассмотрим какие операции выполняет кнопка 3. Эту кнопку удобно использовать в режиме работы с одной томограммой. Номер томограммы при этом определяется автоматически. Он как раз равен первой из серии томограмм, какие обрабатывались в самый послений раз. Если таковая была всего одна, то промахнуться невозможно. Программа в этом месте имеет другой стандартный вид. А именно, кнопки просто пронумерованы и все. А подсказка про то, что делает каждая кнопка написана текстом под кнопками. Фактически функциональность такого меню та же, что и в главном меню, но отличие в том, что информации по каждой кнопке может быть больше. В будущем число операций может быть увеличено, пока есть такие операции. (1) показывает картинку синограммы в jpg формате, которую записала расчетная программа. Сама расчетная программа ее не показывает. (2) показывает синограмму как анимационный график. Синограмма -- это матрица N*M (см. выше). Программа рисует кривые f(N), то есть проекции, меняя значение второго индекса матрицы через определенное время. (3) показывает томограмму в разных вариантах. Этот модуль имеет свои входные данные и свое описание. Об этом написано позднее.
Кнопка 4 имеет точно такой же внешний вид, но тут уже 5 операций. Все операции имеют свои входные данные и свое описание. И то, и другое находится в одном текстовом файле и показывается в редакторе. Соответственно все можно редактировать, исправления запоминаются, если выход из редактора сделан по клавише [Esc]. (1) уничтожает файлы в цикле по номерам внутри указанной папки. (2) копирует файлы в цикле по номерам из папки [r] в папку [t] внутри указанной папки. (3) рисует картинки по числовым матрицам файлов в цикле по номерам внутри указанной папки. (4) определяет минимальное и максимальное значения в числовых матрицах файлов в цикле по номерам внутри указанной папки. (5) исправляет синограмму, пока специальная операция только для меня. Главное назначение этих операций -- пакетная обработка сразу многих файлов. Операции (1) и (2) позволяют переносить файлы из одного места в другое. К сожалению пока прямой операции перемещения нет.
Кнопка 5 позволяет создать числовой файл с квадратной матрицей, которая используется для клипа. Эта матрица имеет во всех точках либо 0, либо 1, она записывается в файл так, что каждая точка в один байт. Условия (граница разделения нулей и единиц) -- это круг заданного диаметра в пикселах. Матрица записывается в файл и показывается. Впоследствии она может быть использована в операциях показа томограмм. Здесь тоже есть входные данные и описание.
Кнопка 6 на самом деле пока не пригодна для пользователей. Ее цель преобразовать входные данные к виду проекций по поглощению, записанных в файлы в tiff фрмате, если они были записаны как-то иначе. Но пока пользователю предлагается самому написать код такого преобразования. Я сам для себя что-то писал, но это будет рассмотрено позднее. Для многих пользователей она не нужна.
3. ОПИСАНИЕ ГЛАВНОГО РАСЧЕТНОГО МОДУЛЯ
Основной расчетный модуль вычисляет серию картинок сечений трехмерного объекта по набору проекций, то есть является программой 3D томографии. Он принимает входные данные в форму, показанную на картинке справа и ниже. Он сам ничего не показывает, кроме степени выполнения работы. Результаты надо смотреть в других разделах главного меню программы.
Для расчетов используется алгоритм FBP (filtered back projection). Программа написана на языке ACL для интерпретатора vkACL и работает в папке [s/vkCT] относительно главной папки интерпретатора. Внутри этой папки нужно открыть новую папки под конкретный набор входных данных, в которую надо записать все картинки проекций. Таких папок может быть много. Программа работает с файлами типа tiff, в которых картинка записана как матрица 16-битных чисел. Файлы с именами, начинающимися с буквы или в виде чисел из более трех разрядов могут иметь любое расширение, а файлы с названием в виде чисел из трех разрядов должны иметь расширение (.tif). Картинки сечений (томограмм) будут созданы внутри этой же папки во внутренней папке с названием [r]. Если этой папки первоначально не сущесвует, то ее необходимо создать средствами операционной системы.
Программа работает в 2 этапа. На первом этапе вычисляются синограммы, на втором -- томограммы. На втором этапе используются данные первого этапа. Более подробно об этом написано при описании 21-й строки входных данных (самой нижней). Необходимо, чтобы набор входных файлов имел имена с трехзначным числом перед последней точкой. Такая форма имен файлов существенно используется в программе. Ниже подробно описан каждый параметр формы, которую пользователь обязан заполнить перед запуском программы.
В 1-й строке нужно задать имя папки конкретного варианта входных данных относительно папки [ s/vkCT ] внутри папки программы. Запись файлов в эту папку пользователь должен выполнить с помощью внешних программ, либо программами операционной системы. Например, если такая папка имеет имя (s/vkCT/var001), то нужно задавать var001.
Во 2-й строке нужно задать базовое имя файлов серии. Если имя начинается с буквы, или в виде числа из более, чем трех разрядов, то можно задать его полностью, например file000.pic, а если имя файла представляет собой число из трех разрядов, то нужно ставить символ *, а файлы должны иметь расширение tif, например, (001.tif).
В 3-й строке обычным числом задается первый индекс файла, который будет обработан. Например, у вас есть файлы с номерами от 000 до 359, но для уменьшения времени счета вы хотите начать с номера 3 и с шагом 5. Тогда надо задать 3. А если нужно учесть все файлы, то ставим номер первого файла и шаг 1.
В 4-й строке задается шаг в именах файлов, как описано выше.
В 5-й строке задается число проекций, которые будут учитываться в работе. Замечу, что 3, 4 и 5 параметры задают стандартные параметры цикла по обработке файлов -- начальное значение, шаг и число точек по углу вращения объекта.
В 6-й и 7-й строках задаются горизонтальный и вертикальный размеры картинок проекций в пикселах, которые записаны в файлах. Размеры самого файла могут быть больше. Размеры картинки легко определяет любой менеджер файлов.
В 8-й строке задается размер используемой проекции в точках. Стандартно он может быть либо равен, либо меньше ширины картинки, и он обязательно должен иметь значение, равное целой степени 2, например, 256, 512, 1024 и так далее. При этом, если картинки в файлах имеют очень много пикселей, то в проекцию можно задавать размер точки в виде 2, 3 и больше пикселей картинки. Такой режим позволяет не конвертируя файлы резко уменьшить время счета, что удобно в режимах обучения и настройки параметров.
В 9-й строке задается вертикальный размер слоя, который используется в формировании одного сечения. Он может быть равен 1 или больше, если сечения вычисляются с большим шагом по вертикали.
В 10-й строке задается отступ по вертикали от нижней границы картинки (то есть от начала записи в файлах) для первого сечения. Этот параметр особенно важен в том случае, когда вычисляется только одно сечение.Так если задать 200, то будет учитываться 201 пиксель картинки по вертикали. Для самого начала надо задавать 0.
В 11- строке задается отступ от левой границы картинки в сечении. Если размер проекции равен ширине картинки, то надо задавать 0. А если меньше, то можно задавать любое разумное значение, то есть так, чтобы сумма отступа и размера проекции, умноженного на размер точки, не была больше размера картинки по горизонтали. Есть специальный режим, который включается если отступ имеет значение -1. В этом случае полная ширина картинки интерполируется на размер проекции, то есть при полном интервале просто уменьшается число точек. Это важно, если объект заполняет всю ширину картинки, а число точек очень большое и не равно целой степени 2. При интерполяции размер точки надо задавать, равным 1.
В 12 строке как раз задается размер точки в пикселах картинки, который обсуждался в описании 8-й и 11-й строк. Он может быть целым числом 1, 2, 3 и так далее.
В 13-й строке задаются X и Y координаты оси вращения в пикселах картинки. Если объект находится в центре, то можно задавать нули, а если он смещен, то правильное задание координат позволит поставить его в центр. Это полезно, потому что в центре круга томограммы точность восстановления максимальна. Конкретный выбор значений определяется эмпирическим путем. Если нет идей, то сначала надо ставить нули.
В 14-й строке можно задать значение параметра сигма гауссовой функции для подавления шумов. В этом случае вычисляется свертка проекции с функцией Гаусса. Конкретное значение можно подобрать эмпирически. А если не нужно, то ставим 0.
В 15-й строке можно задать два числа в одном. Первое число использует старшие разряды до второго. Оно задает число точек проекций, которые обнуляются на левой и правой границах каждой проекции, чтобы уменьшить влияние фона, который возрастает по мере приближения к границе круглой области поля зрения. Если это не нужно, то ничего не ставим, будет ноль. Второе число m использует только один младший разряд. Оно имеет диапазон от 0 до 9 и задает число (1+m), на которое делится максимальное значение числовой матрицы картинки при ее нормировке перед рисованием. Все числа со значениями выше этого числа будут обрезаны на этом максимуме. Это снова позволяет сделать реальное изображение более светлым, так как яркость кольца на границе может быть высокой и на его фоне реальное изображение темное и теряет контраст. Если делить не надо, то задаем 0 и его указывать обязательно. Можно использовать либо каждый из методов отдельно, либо оба вместе.
В 16-й строке задается число томограмм, которые будут вычислены за один сеанс расчета. Тут есть небольшая тонкость, которая будет описана ниже.
В 17-й строке задается шаг вертикального сдвига по картинке для нового сечения в пикселах в режиме расчета многих томограмм сразу. Позиция первого сечения задается в 10-й строке. Параметры 10, 16, 17 образуют цикл по вертикальной координате картинки.
В 18-й строке задается максимальное значение из всех чисел записанных в каждой синограмме. Это значение существенно влияет на контраст и величину фона, но его нельзя задавать для каждого сечения индивидуально. Оно должно быть общим для всех сечений. По этой причине программа разбита на два неравных этапа. На первом этапе вычисляются синограммы всех сечений, и одновременно определяются минимальные и максимальные значения для всех сечений. Эти значения записываются в файл с названием minmax.txt в папке [r] внутри папки варианта, и затем показываются на экране вместе с максимальным значением для всех сечений сразу (в последней строке). В файле три колонки: номер сечения, как текущий параметр отступа по вертикали, минимум и максимум. После того, как первый проход сделан, надо выполнить второй проход, для которого надо задать правильное самое максимальное значение. Это важно для расчета числовых массивов томограмм.
В 19-й строке задается минимальное значение и тоже для всех уровней сразу. В первом проходе, при расчете синограмм значения в 18 и 19 строках не используются, но определяются. Во втором проходе, при расчете томограмм они существенно используются. Причем можно задавать как реально рассчитанные из синограмм значения, так и меньший интервал, то есть меньше максимум и больше минимум. Это будет реально влиять на контраст томограммы.
В 20-й строке задается сдвиг по байтам в tiff файлах от начала файла, который надо сделать перед считыванием числовой матрицы картинки. Этот сдвиг можно узнать, если прочитать таги tiff файла. Для этого есть программы в интернете, но в программе vkACL также есть операция, которая это делает. Она запускается по клавишам Alt+B, затем по кнопке (Img pro), а в ней по кнопке 8 (Special operations) и затем по кнопке 9 (find taggs in tiff files). Очень часто картинка находится в конце файла, но это не всегда так. Более универсально задавать этот сдвиг после проверки тагов в первом tiff файле.
В 21-й строке задается номер операции в младшем разряде.
=> Для первого прохода (расчет синограмм) надо задавать номер 1. Время его работы относительно небольшое. По этой причине разумно сразу заказать расчет всех сечений, которые предполагается получить.
=> Для второго прохода надо задавать номер 2, и это главный расчет томограмм. Он относительно медленный. Его можно запускать несколько раз и обрабатывать томограммы по частям. Этим легко управлять из входных данных. После выполнения этой операции программа показывает время расчета в секундах в конце строки подсказки. Это время можно использовать при планировании большого расчета.
=> Номер 3 надо задавать для получения фрагмента уже просчитанных томограмм либо с исходным контрастом, либо с более высоким. В этой операции сначала показывается текстовый файл, в котором в первой строке записаны параметры, а в остальных -- небольшая инструкция что они означают и как этим пользоваться. Эта операция продублирована в других операциях полной программы.
=> Операция с номером 4 может использоваться в учебных целях, а также для тестирования программы. Эта операция позволяет создать набор проекций из оригинальной картинки, которая показывает распределение плотности материала и является виртуальным объектом. Картинку следует заранее записать в папку варианта, которая указывается в первой строке. Она должна иметь имя "source.png" и быть квадратной с числом пикселей на любой стороне, равным 64, 128, 256, 512 и так далее, то есть целой степени 2. Картинка должна быть серой, в которой каждый пиксель имеет значение в интервале от 0 до 255. Операция не использует базовое имя файла. Вместо этого ставится буква z и трехзначный номер. Но она использует число проекций (строка 5), размер проекций (строка 8), вертикальный сдвиг (строка 18) и максимальное значение (строка 19). Остальные параметры не используются. В результате операции в папку варианта записываются файлы с номерами от 000 до nnn, где последний номер имеет значение числа проекций минус 1. Параметр "вертикальный сдвиг" в этом случае может быть равен целому числу от 1 до 4 и он имеет смысл эффективного поглощения материала. Если он будет иметь другое значение, то он принудительно ставится на ближайшую границу этого интервала. Результат, то есть томограмма от него не зависит, а вот картинка синограммы может зависеть. Все картинки проекций записываются с высотой равной 1. Такую высоту надо задавать в 7-й строке при записи синограммы.
. . . . В стандартном варианте старший разряд параметра равен 0. В этом случае при расчете томограммы (второй проход) данные синограммы I(x) используются как t(x) = --log(I(x)/Io) , где Io -- максимальное значение (строка 18). Если он не равен 0 (например 1), то это преобразование не делается и t(x) = I(x).
Имена файлов: При первом проходе программа записывает файлы типа sin0000.dat и sin0000.jpg в папке [r] внутри папки варианта, а также файл minmax.txt в той же папке. Номера идут от 0 и в 4-х разрядах записывается параметр вертикального отступа. При втором проходе программа записывает файлы типа tom0000.dat и tom0000.jpg в той же папке. В файлах типа .dat картинки записаны в числовом виде, то есть как матрица чисел, во вторых -- в сжатом jpeg формате, которые можно посмотреть любой программой, в том числе и другими модулями данного интерпретатора ACL. В результате третьей операции записываются файлы типа tomf0000.jpg в той же папке.
Окно входных данных имеет стандартный вид с подписанными строками ввода параметров и 6 кнопками. [Note] запускает редактор с файлом, в который можно писать свои замечания. Это записная книжка. Программа сохраняет текущий вариант входных данных. Кроме этого, она имеет базу данных вариантов из 25 ячеек. Кнопка [Save Var] позволяет сохранить текущий вариант в любой из 25 ячеек. Кнопка [Choose Var] наоборот позволяет выставить в строки ввода любой из спасенных ранее вариантов. Кнопка [OK] запускает программу, а кнопка [Cancel] позволяет закончить работу.
Для эффективной работы программы иногда удобно ее использовать одновременно с двумя другими программами, а именно, менеджером файлов и программой показа картинок. В качестве первой программы я рекомендую бесплатную программу Q-dir, которую можно скачать на сайте (http://www.softwareok.com/). Но можно пользоваться и Операционной Системой, хотя это менее удобно. Самая лучшая и относительно простая программа показа картинок, по моему мнению -- это бесплатная программа FastStone Image Viewer (FSIV), которую можно скачать на ее сайте (http://www.faststone.org/FSViewerDetail.htm)
В программе интерпретатора vkACL есть модуль [ Img pro ] и в нем операция [ Показать картинки ], но она показывает только jpg, gif и png файлы и только по одной, после выбора из меню. Для оперативности копию программы можно открыть в другом окне. Есть и более развитые операции показа картинок, в частности слайд шоу.
Некоторая информация о самом методе расчета может быть получена в интернете по адресу (http://kohnvict.ucoz.ru/a/5/vk5716-ct.pdf). А пример тестирования и использования программы по адресу (http://kohnvict.ucoz.ru/a/5/tomography.htm)
4. ОПИСАНИЕ НЕКОТОРЫХ ОПЕРАЦИЙ ПО КНОПКАМ ГЛАВНОГО МЕНЮ
Oперации различаются двумя номерами кнопок. Первая -- это кнопка главного меню, вторая -- это кнопка меню внутри выбранной программы. Ниже указаны только те операции, которые имеют входные данные.
3-3 . . . Операция (ПРОСМОТР ОДНОЙ ТОМОГРАММЫ)
. . . Расчетная программа даже в режиме работы с одной томограммой картинку не показывает. Она создает два файла -- числовую матрицу и картинку в формате jpg.
. . . Если первый слева из трех разрядов параметра K равен 1, то данная операция показывает картинку jpg формата, которую создает расчетная программа. Контраст этой картинки зависит от параметров расчета и может не совпадать с контрастом числовой матрицы.
. . . Eсли второй слева разряд равен 1, то затем показывается картинка из исходной числовой матрицы с разметкой осей и шкалой цветов. При этом параметры x1 и x2 указывают начало и конец осей в физических единицах, x3 указывает начало первой длинной риски в тех же единицах, x4 указывает шаг до следующей длинной риски, ns указывает число коротких рисок между длинными. Если ns равно -1, то картинка рисуется без разметки.
. . . Если крайний справа разряд равен 1, то делается следующее. Если параметр na=0, то параметр nb не используется, а полная числовая матрица рисуется с разметкой осей и клипом. Соответственно файл clippic.dat должен присутствовать. Он создается отдельной операцией (ее номер 6).
. . . Eсли параметр na больше нуля, но меньше полного размера томограммы, то рисуется часть числовой матрицы размером na. При этом параметр nb указывает на сдвиг части из левого нижнего угла. При этом клип не делается. Но если параметр na меньше нуля, то используется модуль и клип делается. Ситуация с разметкой такая же, как и выше. Истинная разметка осей и клип не может быть одновременно правильными для полной матрицы и для ее части, поэтому картинки с разметкой и клипом надо рисовать раздельно.
. . . В данном файле можно хранить варианты входных данных в строках с 2-й и дальше. Программа всегда использует только первую строку.
. . . Всегда используется номер томограммы, который был указан последним при использовании основной операции расчета. Он считывается из файла ct.par.
. . . Данная операция имеет смысл только в режите работы с одной томограммой для отладки и учебы. Более продвинутой является операция 7.3, которая может работать с большим числом томограмм сразу.
4-1 . . . Данная операция уничтожает файлы в папке с названием и началом имени, которое указывается во втором аргументе (а2), и с расширением, которое указывается в третьем аргументе(а3). Второй аргумент записывается после первой вертикальной черты, третий после второй вертикальной черты. В текстовых аргументах пробелов быть не должно. Реальное имя файлов такое [ s/vkCT/(а2)
4-2 . . . Данная операция копирует файлы в папке с названием, которое указывается во втором аргументе (а2), и внутри нее в папке с именем [r], а также с заголовком файлов, которое указывается в третьем аргументе (а3), и с расширением, которое указывается четвертым аргументом (а4). Второй аргумент записывается после первой вертикальной черты, третий после второй вертикальной черты и так далее. В текстовых аргументах пробелов быть не должно. Реальное имя файлов такое [ s/vkCT/(а2)/r/(a3)
4-3 . . . операция КАРТИНКИ ТОМОГРАММ ПОСЛЕ ОБРАБОТКИ ДАННЫХ
4-4 . . . Данная операция использует числовые файлы томограмм в папке с названием, которое указывается во втором аргументе (а2), которая находится внутри папки данной программы, а также с заголовком файлов, которое указывается в третьем аргументе (а3), и с расширением (.dat). Второй аргумент записывается после первой вертикальной черты, третий после второй вертикальной черты и так далее. В текстовых аргументах пробелов быть не должно. Реальное имя файлов такое [ s/vkCT/(а2)(a3)
5- . . . Операция (Создание числового массива для картинки выделения области)
.
. . . Данная операция использует числовые файлы в папке с названием, которое указывается во втором аргументе (а2) вместе с заголовком файлов. Расширение файлов (.dat) указывается автоматически. Второй аргумент записывается после первой вертикальной черты и заканчивается второй вертикальной чертой. В текстовых аргументах пробелов быть не должно. Реальные имена файлов будут такие (s/vkCT/(а2)
. . . Файлы используются в цикле, имеющем [n] повторений. При каждом повторении, кроме первого, значение [k] увеличивается на [s]. Значения параметров k, s, n, ni, na, nb, V0, V1 указываются в первом аргументе (а1), то есть до первой вертикальной черты, и здесь пробелы ничего не значат. Знаки равенства и точки с запятой обязательны.
. . . Данные из файлов изменяются таким образом, что все числа, которые меньше, чем V0, заменяются на V0, а которые больше, чем V1, заменяются на V1. Затем считываются данные из файла (s/vkCT/clippic.dat) и поэлементно умножаются на данные томограммы. Параметр ni указывает размер исходной квадратной матрицы. Далее, если na < ni, то из исходного квадрата вырезается квадрат размером na со сдвигом nb из левого нижнего угла. Полученные таким образом новые данные используются для изготовления картинки, которая записывается с тем же именем, только расширение (dat) заменяется на (png).
. . . Входные данные считываются из первой строки. В остальной части текста можно писать все, что угодно. Чтобы выполнить операцию закрываем редактор клавишей (Esc) или через меню. При отказе от операции выходим из редактора кликом крестика в правом верхнем углу. При этом изменения, сделанные в данном тексте не сохраняются. Их надо предварительно скопировать в другое место. Для правильной работы программы файл clippic.dat должен быть приготовлен заранее. Это делает 6-я операция основного меню. Картинки записываются в файлы, но не показываются. Провожится мониторинг степени выполнения операции.
Данная операция создает квадратную матрицу чисел с числом точек по каждой стороне N, внутри которой все числа координаты которых вписываются в круг диаметром D, равны 1 а числа, координаты которых не вписываются, равны 0. Пользователь должен определить указанные 2 числа в первой строке этого текста. Больше там ничего не должно быть. Во всех остальных строках может быть любой текст. При умножении такой матрицы на матрицу любой картинки такого же размера останется лищь часть картинки, внутри круга.