Графическое изображение, представленное в памяти компьютера в виде последовательности линейных уравнений
Обновлено: 21.11.2024
Это первое руководство из семинара "Начало работы с ливерморскими вычислениями". Он предназначен для предоставления лишь краткого обзора обширной и обширной темы параллельных вычислений в качестве вводной части для последующих руководств. Таким образом, он охватывает только самые основы параллельных вычислений и предназначен для тех, кто только знакомится с предметом и планирует посетить одно или несколько других руководств на этом семинаре. Он не предназначен для подробного рассмотрения параллельного программирования, так как это потребует значительно больше времени. Учебное пособие начинается с обсуждения параллельных вычислений — что это такое и как оно используется, после чего следует обсуждение концепций и терминологии, связанных с параллельными вычислениями. Затем исследуются темы параллельных архитектур памяти и моделей программирования. За этими темами следует серия практических дискуссий по ряду сложных вопросов, связанных с проектированием и выполнением параллельных программ. Учебник завершается несколькими примерами того, как распараллелить несколько простых задач. Ссылки включены для дальнейшего самостоятельного изучения.
Обзор
Что такое параллельные вычисления?
Последовательные вычисления
Традиционно программное обеспечение писалось для последовательных вычислений:
- Задача разбита на отдельные серии инструкций.
- Инструкции выполняются последовательно одна за другой
- Выполняется на одном процессоре
- В любой момент времени может выполняться только одна инструкция
Например:
Параллельные вычисления
Проще говоря, параллельные вычисления — это одновременное использование нескольких вычислительных ресурсов для решения вычислительной задачи:
- Проблема разбивается на отдельные части, которые можно решать одновременно
- Каждая часть далее разбита на серию инструкций.
- Инструкции из каждой части выполняются одновременно на разных процессорах
- Используется общий механизм контроля/координации
Например:
- Вычислительная задача должна уметь:
- Разбить на отдельные части работы, которые можно решать одновременно;
- Выполнение нескольких программных инструкций в любой момент времени;
- Решайте задачи быстрее, используя несколько вычислительных ресурсов, чем один вычислительный ресурс.
- Один компьютер с несколькими процессорами/ядрами
- Произвольное количество таких компьютеров, объединенных в сеть
Параллельные компьютеры
- Сегодня практически все автономные компьютеры параллельны с аппаратной точки зрения:
- Несколько функциональных блоков (кеш L1, кэш L2, переход, предварительная выборка, декодирование, операции с плавающей запятой, обработка графики (GPU), целые числа и т. д.)
- Несколько исполнительных блоков/ядер
- Несколько аппаратных потоков
- Сети соединяют несколько автономных компьютеров (узлов) для создания больших параллельных компьютерных кластеров.
- Например, на приведенной ниже схеме показан типичный кластер параллельных компьютеров LLNL:
- Каждый вычислительный узел сам по себе является многопроцессорным параллельным компьютером
- Несколько вычислительных узлов объединены в сеть Infiniband.
- Узлы специального назначения, также многопроцессорные, используются для других целей.
- Большинство больших параллельных компьютеров (суперкомпьютеров) в мире представляют собой кластеры оборудования, произведенного несколькими (в основном) известными поставщиками.
Зачем использовать параллельные вычисления?
Реальный мир чрезвычайно сложен
- В естественном мире множество сложных, взаимосвязанных событий происходит одновременно, но в рамках временной последовательности.
- По сравнению с последовательными вычислениями параллельные вычисления гораздо лучше подходят для моделирования, имитации и понимания сложных явлений реального мира.
- Например, представьте себе их последовательное моделирование:
Основные причины использования параллельного программирования
ЭКОНОМЬТЕ ВРЕМЯ И/ИЛИ ДЕНЬГИ
- Теоретически, выделение большего количества ресурсов для выполнения задачи сократит время ее выполнения и потенциально сэкономит средства.
- Параллельные компьютеры могут быть собраны из дешевых, широко распространенных компонентов.
РЕШАТЬ БОЛЬШИЕ/БОЛЕЕ СЛОЖНЫЕ ПРОБЛЕМЫ
ОБЕСПЕЧИТЬ ПАРАЛЛЕЛЬНОСТЬ
- Один вычислительный ресурс может одновременно выполнять только одну операцию. Несколько вычислительных ресурсов могут выполнять множество задач одновременно.
- Пример. Сети для совместной работы представляют собой глобальную площадку, где люди со всего мира могут встречаться и работать «виртуально».
ИСПОЛЬЗОВАТЬ НЕМЕСТНЫЕ РЕСУРСЫ
- Использование вычислительных ресурсов в глобальной сети или даже в Интернете, когда локальных вычислительных ресурсов недостаточно или недостаточно.
- Пример. SETI@home (setiathome.berkeley.edu) насчитывает более 1,7 миллиона пользователей почти во всех странах мира (май 2018 г.).
ЛУЧШЕ ИСПОЛЬЗОВАТЬ БАЗОВОЕ ПАРАЛЛЕЛЬНОЕ ОБОРУДОВАНИЕ
- Современные компьютеры, даже ноутбуки, имеют параллельную архитектуру с несколькими процессорами/ядрами.
- Параллельное программное обеспечение специально предназначено для параллельного оборудования с несколькими ядрами, потоками и т. д.
- В большинстве случаев последовательные программы, запускаемые на современных компьютерах, «тратят впустую» потенциальную вычислительную мощность.
Будущее
Кто использует параллельные вычисления?
Наука и техника
Исторически параллельные вычисления считались «высшим уровнем вычислений» и использовались для моделирования сложных задач во многих областях науки и техники:
- Атмосфера, Земля, Окружающая среда
- Физика - прикладная, ядерная, частица, конденсированное состояние, высокое давление, термоядерный синтез, фотоника.
- Бионаука, биотехнология, генетика
- Химия, молекулярные науки
- Геология, сейсмология
- Машиностроение: от протезов до космических кораблей
- Электротехника, схемотехника, микроэлектроника
- Информатика, математика
- Оборона, Оружие
Промышленные и коммерческие
Сегодня коммерческие приложения являются равной или даже большей движущей силой в разработке более быстрых компьютеров. Эти приложения требуют сложной обработки больших объемов данных. Например:
Раздел 404 Закона Сарбейнса-Оксли (SOX) требует, чтобы все публичные компании установили внутренний контроль и процедуры.
Закон о защите конфиденциальности детей в Интернете от 1998 года (COPPA) – это федеральный закон, который налагает особые требования на операторов доменов .
План North American Electric Reliability Corporation по защите критически важной инфраструктуры (NERC CIP) представляет собой набор стандартов.
Стандарт безопасности данных платежных приложений (PA-DSS) – это набор требований, призванных помочь поставщикам программного обеспечения в разработке безопасных .
Взаимная аутентификация, также называемая двусторонней аутентификацией, представляет собой процесс или технологию, в которой оба объекта обмениваются данными .
Экранированная подсеть или брандмауэр с тройным подключением относится к сетевой архитектуре, в которой один брандмауэр используется с тремя сетями .
Медицинская транскрипция (МТ) – это ручная обработка голосовых сообщений, продиктованных врачами и другими медицинскими работниками.
Электронное отделение интенсивной терапии (eICU) — это форма или модель телемедицины, в которой используются самые современные технологии.
Защищенная медицинская информация (PHI), также называемая личной медицинской информацией, представляет собой демографическую информацию, медицинскую .
Снижение рисков – это стратегия подготовки к угрозам, с которыми сталкивается бизнес, и уменьшения их последствий.
Отказоустойчивая технология — это способность компьютерной системы, электронной системы или сети обеспечивать бесперебойное обслуживание.
Синхронная репликация — это процесс копирования данных по сети хранения, локальной или глобальной сети, поэтому .
Коэффициент усиления записи (WAF) – это числовое значение, представляющее объем данных, передаваемых контроллером твердотельного накопителя (SSD) .
API облачного хранилища — это интерфейс прикладного программирования, который соединяет локальное приложение с облачным хранилищем.
Интерфейс управления облачными данными (CDMI) – это международный стандарт, определяющий функциональный интерфейс, используемый приложениями.
Несмотря на то, что были приложены все усилия для соблюдения правил стиля цитирования, могут быть некоторые расхождения. Если у вас есть какие-либо вопросы, обратитесь к соответствующему руководству по стилю или другим источникам.
Наши редакторы рассмотрят то, что вы отправили, и решат, нужно ли пересматривать статью.
растровая графика, также называемая растровой графикой, тип цифрового изображения, в котором используются крошечные прямоугольные пиксели или элементы изображения, расположенные в виде сетки для представления изображения. Поскольку формат может поддерживать широкий диапазон цветов и отображать тонкие градуированные тона, он хорошо подходит для отображения изображений с непрерывными тонами, таких как фотографии или затененные рисунки, наряду с другими детализированными изображениями.
Растровая графика возникла в телевизионных технологиях, а изображения построены так же, как изображения на экране телевизора. Растровая графика состоит из набора крошечных пикселей одинакового размера, которые расположены в двумерной сетке, состоящей из столбцов и строк. Каждый пиксель содержит один или несколько битов информации, в зависимости от степени детализации изображения. Например, черно-белое изображение содержит только один бит на пиксель (двоичный бит может находиться в одном из двух состояний; таким образом, один бит может представлять белый или черный цвет); изображение с затенением и цветом обычно содержит 24 бита информации на пиксель — с 2 24 или более чем 16 миллионами возможных состояний на пиксель. 24-битный цвет, известный как «истинный цвет», может реалистично отображать цветные изображения. Количество битов, хранящихся в каждом пикселе, называется глубиной цвета. Количество пикселей на дисплее, называемое разрешением, влияет на то, сколько деталей может быть изображено на изображении. Разрешение часто выражается как произведение количества пикселей в столбце на количество пикселей в строке (например, 800 × 600).
Детальные изображения часто приводят к большому размеру файла, хотя размер файла можно уменьшить за счет сжатия данных. Сжатие может быть как с потерями (что означает, что некоторые данные отбрасываются), так и без потерь (данные не теряются). Популярные форматы растровых файлов включают GIF (формат обмена графикой) и JPEG (объединенная группа экспертов по фотографии), которые являются форматами с потерями, а также BMP (битмап Windows) и TIFF (формат файлов изображений с тегами), которые не содержат потерь.
Несмотря на то, что растровая графика использовалась в 1970-х и 80-х годах, в основном она ограничивалась дорогостоящими графическими рабочими станциями (т. е. высокопроизводительными компьютерами, специально оптимизированными для работы с графикой). По мере улучшения графических возможностей персональных компьютеров в 1990-х годах растровая графика стала широко использоваться. Изображения, полученные с помощью оптических сканеров и цифровых камер, представляют собой растровую графику, как и большинство изображений в Интернете. Широко используемой графической программой для работы с растровыми изображениями является Adobe Photoshop.
Редакторы Британской энциклопедии Эта статья была недавно отредактирована и обновлена Эриком Грегерсеном.
Это руководство взято из книги Дэниела Шиффмана Learning Processing, опубликованной Морганом Кауфманном, © Elsevier Inc., 2008. Все права защищены. Если вы заметили какие-либо ошибки или у вас есть комментарии, сообщите нам об этом.
Цифровое изображение — это не что иное, как данные — числа, обозначающие вариации красного, зеленого и синего цветов в определенном месте сетки пикселей. Большую часть времени мы видим эти пиксели как миниатюрные прямоугольники, склеенные вместе на экране компьютера. Однако, приложив немного творческого мышления и немного манипулируя пикселями с помощью кода, мы можем отображать эту информацию множеством способов. Это руководство посвящено переходу от простого рисования фигур в Обработке и использованию изображений (и их пикселей) в качестве строительных блоков Обработки графики.
Начало работы с изображениями.
Надеюсь, вам нравится идея типов данных. Вероятно, вы часто их указываете — переменная с плавающей запятой «скорость», целое число «х» и т. д. Все это примитивные типы данных, биты, хранящиеся в памяти компьютера и готовые для нашего использования.Хотя, возможно, это немного сложнее, мы надеемся, что вы также используете объекты, сложные типы данных, которые хранят несколько фрагментов данных (наряду с функциональностью) — например, класс «Ball» может включать переменные с плавающей запятой для местоположения, размера и скорости. как методы для перемещения, отображения себя и т. д.
В дополнение к определяемым пользователем объектам (например, Ball) в Processing есть множество удобных классов, готовых к работе без написания кода. В этом руководстве мы рассмотрим PImage, класс для загрузки и отображения изображения, а также просмотра его пикселей.
Использование экземпляра объекта PImage ничем не отличается от использования определяемого пользователем класса. Сначала объявляется переменная типа PImage с именем img. Во-вторых, новый экземпляр объекта PImage создается с помощью метода loadImage(). loadImage() принимает один аргумент, строку, указывающую имя файла, и загружает этот файл в память. loadImage() ищет файлы изображений, хранящиеся в папке «data» скетча Processing.
Папка данных: как туда попасть?
Изображения могут автоматически добавляться в папку данных с помощью:
Эскиз → Добавить файл. . .
Эскиз → Показать папку эскиза
Откроется папка эскиза. Если каталога данных нет, создайте его. В противном случае поместите файлы изображений внутрь.
Обработка принимает следующие форматы файлов для изображений: GIF, JPG, TGA, PNG.
В приведенном выше примере может показаться немного странным, что мы никогда не вызывали «конструктор» для создания экземпляра объекта PImage, говоря new PImage() . В конце концов, в большинстве примеров, связанных с объектами, конструктор необходим для создания экземпляра объекта.
Фактически функция loadImage() выполняет работу конструктора, возвращая совершенно новый экземпляр объекта PImage, сгенерированный из указанного имени файла. Мы можем думать об этом как о конструкторе PImage для загрузки изображений из файла. Для создания пустого изображения используется функция createImage().
Мы также должны отметить, что процесс загрузки образа с жесткого диска в память является медленным, и мы должны убедиться, что наша программа делает это только один раз, в setup() . Загрузка изображений в draw() может привести к снижению производительности, а также к ошибкам «Недостаточно памяти».
После загрузки изображения оно отображается с помощью функции image(). Функция image() должна включать 3 аргумента — отображаемое изображение, координаты x и координаты y. При желании можно добавить два аргумента для изменения размера изображения до определенной ширины и высоты.
Ваш самый первый фильтр для обработки изображений
При отображении изображения вы можете изменить его внешний вид. Возможно, вы хотели бы, чтобы изображение выглядело более темным, прозрачным, голубоватым и т. д. Этот тип простой фильтрации изображения достигается с помощью функции tint() Processing. tint() по существу эквивалент изображения fill() формы, устанавливая цвет и альфа-прозрачность для отображения изображения на экране. Тем не менее, изображение обычно не бывает одноцветным. Аргументы для tint() просто указывают, сколько данного цвета использовать для каждого пикселя этого изображения, а также насколько прозрачными должны быть эти пиксели.
Для следующих примеров мы предполагаем, что загружены два изображения (подсолнух и собака), а собака отображается в качестве фона (что позволит нам продемонстрировать прозрачность).
Если tint() получает один аргумент, затрагивается только яркость изображения.
Второй аргумент изменит альфа-прозрачность изображения.
Три аргумента влияют на яркость красного, зеленого и синего компонентов каждого цвета.
Наконец, добавление четвертого аргумента к методу манипулирует альфа-каналом (так же, как и с 2). Между прочим, диапазон значений для tint() можно указать с помощью colorMode().
Пиксели, пиксели и еще раз пиксели
Если вы только начали использовать Processing, вы, возможно, ошибочно полагали, что единственным предлагаемым способом рисования на экране является вызов функции. «Нарисуйте линию между этими точками», или «Залейте эллипс красным», или «загрузите это изображение в формате JPG и поместите его на экран здесь». Но где-то каким-то образом кто-то должен был написать код, который переводит эти вызовы функций в настройку отдельных пикселей на экране для отражения запрошенной формы.Линия появляется не потому, что мы говорим line(), она появляется, потому что мы окрашиваем все пиксели вдоль линейного пути между двумя точками. К счастью, нам не нужно ежедневно управлять этой низкоуровневой настройкой пикселей. Мы должны поблагодарить разработчиков Processing (и Java) за множество функций рисования, которые заботятся об этом бизнесе.
Тем не менее, время от времени нам действительно хочется вырваться из нашего обыденного существования, рисуя фигуры, и напрямую работать с пикселями на экране. Обработка обеспечивает эту функциональность через массив пикселей.
Мы знакомы с идеей, что каждый пиксель на экране имеет положение X и Y в двухмерном окне. Однако массив пикселей имеет только одно измерение, храня значения цвета в линейной последовательности.
Возьмите следующий простой пример. Эта программа устанавливает для каждого пикселя в окне случайное значение оттенков серого. Массив пикселей ничем не отличается от любого другого массива, с той лишь разницей, что его не нужно объявлять, так как это встроенная переменная Processing.
Во-первых, мы должны отметить что-то важное в приведенном выше примере. Всякий раз, когда вы обращаетесь к пикселям окна обработки, вы должны предупреждать обработку об этом действии. Это достигается с помощью двух функций:
-
Эта функция вызывается перед тем, как вы получите доступ к массиву пикселей, говоря: «Загрузите пиксели, я хотел бы поговорить с ними!» Эта функция вызывается после того, как вы закончите работу с массивом пикселей и скажете: «Давай, обнови пиксели, я готов!»
В приведенном выше примере, поскольку цвета задаются случайным образом, нам не нужно беспокоиться о том, где находятся пиксели на экране при доступе к ним, поскольку мы просто устанавливаем все пиксели независимо от их относительного расположения. Однако во многих приложениях для обработки изображений расположение пикселей по осям XY является важной информацией. Простым примером этого может быть установка для каждого четного столбца пикселей белого цвета, а для каждого нечетного — черного. Как вы могли бы сделать это с одномерным массивом пикселей? Как узнать, в каком столбце или строке находится тот или иной пиксель?
При программировании с пикселями нам нужно иметь возможность думать о каждом пикселе как о живущем в двухмерном мире, но продолжать получать доступ к данным в одном (поскольку именно так они становятся доступными для нас). Мы можем сделать это с помощью следующей формулы:
- Допустим окно или изображение с заданными значениями WIDTH и HEIGHT.
- Тогда мы знаем, что общее количество элементов массива пикселей равно WIDTH * HEIGHT.
- Для любой заданной точки X, Y в окне расположение в нашем одномерном массиве пикселей: РАСПОЛОЖЕНИЕ = X + Y * ШИРИНА.
Это может напомнить вам наш учебник по двумерным массивам. На самом деле нам нужно будет использовать ту же технику вложенных циклов for. Разница в том, что, хотя мы хотим использовать циклы for, чтобы думать о пикселях в двух измерениях, когда мы переходим к фактическому доступу к пикселям, они находятся в одномерном массиве, и мы должны применить формулу из приведенной выше иллюстрации.
Давайте посмотрим, как это делается.
Введение в обработку изображений
В предыдущем разделе были рассмотрены примеры, в которых значения пикселей задаются в соответствии с произвольным вычислением. Теперь мы рассмотрим, как мы можем установить пиксели в соответствии с найденными в существующем объекте PImage. Вот некоторый псевдокод.
- Загрузить файл изображения в объект PImage
- Для каждого пикселя в PImage извлеките цвет пикселя и установите этот цвет для отображаемого пикселя.
Класс PImage включает несколько полезных полей, в которых хранятся данные, связанные с изображением, — ширина, высота и пиксели. Как и в случае с нашими пользовательскими классами, мы можем получить доступ к этим полям с помощью точечного синтаксиса.
Доступ к этим полям позволяет нам просмотреть все пиксели изображения и отобразить их на экране.
Теперь мы, безусловно, могли бы придумать упрощения, чтобы просто отображать изображение (например, вложенный цикл не требуется, не говоря уже о том, что использование функции image() позволит нам полностью пропустить всю эту работу с пикселями .) Однако в примере 15-7 представлена базовая структура для получения значений красного, зеленого и синего для каждого пикселя на основе его пространственной ориентации (местоположения XY); в конечном итоге это позволит нам разработать более совершенные алгоритмы обработки изображений.
Прежде чем мы двинемся дальше, я должен подчеркнуть, что этот пример работает, потому что область отображения имеет те же размеры, что и исходное изображение. Если бы это было не так, вам просто нужно было бы иметь два вычисления местоположения пикселя, один для исходного изображения и один для области отображения.
Наш второй фильтр изображения, создающий собственный «оттенок»
Всего несколько абзацев назад мы наслаждались расслабляющим сеансом кодирования, раскрашивая изображения и добавляя альфа-прозрачность с помощью удобного метода tint(). Для базовой фильтрации этот метод сработал. Однако метод «пиксель за пикселем» позволит нам разработать собственные алгоритмы для математического изменения цветов изображения. Учитывайте яркость — более яркие цвета имеют более высокие значения красного, зеленого и синего компонентов. Отсюда естественно следует, что мы можем изменять яркость изображения, увеличивая или уменьшая цветовые компоненты каждого пикселя. В следующем примере мы динамически увеличиваем или уменьшаем эти значения в зависимости от горизонтального положения мыши. (Обратите внимание, следующие два примера включают только сам цикл обработки изображения, остальная часть кода предполагается.)
Поскольку мы изменяем изображение для каждого пикселя, нет необходимости обрабатывать все пиксели одинаково. Например, мы можем изменить яркость каждого пикселя в зависимости от его расстояния от мыши.
Запись в пиксели другого объекта PImage
Все наши примеры обработки изображений считывают каждый пиксель исходного изображения и записывают новый пиксель непосредственно в окно обработки. Однако часто удобнее записывать новые пиксели в целевое изображение (которое затем отображается с помощью функции image()). Мы продемонстрируем эту технику, рассмотрев другую простую операцию с пикселями: порог.
Пороговый фильтр отображает каждый пиксель изображения только в одном из двух состояний: черном или белом. Это состояние устанавливается в соответствии с определенным пороговым значением. Если яркость пикселя больше порога, мы окрашиваем пиксель в белый цвет, меньше — в черный. В приведенном ниже коде мы используем произвольное пороговое значение 100.
Эта конкретная функция доступна без попиксельной обработки как часть функции filter() Processing. Однако понимание кода более низкого уровня имеет решающее значение, если вы хотите реализовать свои собственные алгоритмы обработки изображений, недоступные с filter() .
Но если все, что вам нужно сделать, это установить порог, вот как это сделать:
Уровень II: обработка группы пикселей
В предыдущих примерах мы видели отношение один к одному между исходными и целевыми пикселями. Чтобы увеличить яркость изображения, мы берем один пиксель из исходного изображения, увеличиваем значения RGB и отображаем один пиксель в окне вывода. Чтобы выполнять более продвинутые функции обработки изображений, мы должны перейти от парадигмы один к одному пикселю к обработке групп пикселей.
Начнем с создания нового пикселя из двух пикселей исходного изображения — пикселя и его соседа слева.
Если мы знаем, что пиксель расположен в точке (x,y):
Тогда его левый сосед находится в точке (x-1,y):
Затем мы могли бы создать новый цвет из разницы между пикселем и его соседом слева.
Вот полный алгоритм:
Этот пример представляет собой простой алгоритм обнаружения горизонтальных границ. Когда пиксели сильно отличаются от своих соседей, они, скорее всего, являются «краевыми» пикселями. Например, представьте изображение белого листа бумаги на черной столешнице. Края этой бумаги — это места, где цвета наиболее сильно различаются, где белый встречается с черным.
В предыдущем примере мы просмотрели два пикселя, чтобы найти края. Однако более сложные алгоритмы обычно включают одновременное рассмотрение множества пикселей. Ведь у каждого пикселя есть 8 непосредственных соседей: вверху слева, вверху, вверху справа, справа, внизу справа, внизу, внизу слева, слева.
Эти алгоритмы обработки изображений часто называют "пространственной сверткой". Процесс использует средневзвешенное значение входного пикселя и его соседей для вычисления выходного пикселя. Другими словами, этот новый пиксель является функцией площади пикселей. Можно использовать соседние области разных размеров, например, матрицу 3x3, 5x5 и т. д.
Различные комбинации весов для каждого пикселя приводят к различным эффектам. Например, мы «увеличиваем резкость» изображения, вычитая значения соседних пикселей и увеличивая пиксель центральной точки. Размытие достигается путем получения среднего значения всех соседних пикселей. (Обратите внимание, что значения в матрице свертки в сумме дают 1).
Ниже приведен пример выполнения свертки с использованием двумерного массива (см. Главу 13, стр. XX для обзора двумерных массивов) для хранения весов пикселей матрицы 3x3.Этот пример, вероятно, является самым продвинутым примером, с которым мы столкнулись в этой книге, поскольку он включает в себя очень много элементов (вложенные циклы, 2D-массивы, пиксели PImage и т. д.).
Визуализация изображения
Вы можете подумать: "Боже, это все очень интересно, но если серьезно, когда я хочу размыть изображение или изменить его яркость, мне действительно нужно писать код? Я имею в виду, нельзя ли мне использовать Photoshop? " На самом деле то, чего мы здесь добились, — это просто вводное понимание того, чем занимаются высококвалифицированные программисты в Adobe. Однако сила Processing заключается в потенциале интерактивных графических приложений в реальном времени. Нам не нужно жить в рамках обработки «точек пикселей» и «групп пикселей».
Ниже приведены два примера алгоритмов обработки рисунков. Вместо того, чтобы раскрашивать фигуры случайным образом или жестко запрограммированными значениями, как это было раньше, мы выбираем цвета из пикселей внутри объекта PImage. Само изображение никогда не отображается; скорее, он служит базой данных информации, которую мы можем использовать для множества творческих целей.
В этом первом примере для каждого цикла через функцию draw() мы заполняем один эллипс в случайном месте на экране цветом, взятым из соответствующего места на исходном изображении. В результате получается базовый эффект «пуантилизма»:
В следующем примере мы берем данные из двухмерного изображения и с помощью методов трехмерного преобразования, описанных в главе 14, визуализируем прямоугольник для каждого пикселя в трехмерном пространстве. Расположение z определяется яркостью цвета. Более яркие цвета кажутся ближе к зрителю, а темные — дальше.
Системы обработки и представления черепных компьютерных томограмм стали важным дополнением к использованию компьютеров в медицине, особенно в радиологии. В этой статье делается попытка обрисовать глобальный взгляд на некоторые важные технические возможности, которые такие системы могут предоставить с использованием методов обработки изображений, анализа изображений и компьютерной графики. Экспериментальные результаты проекта COMPACT представлены там, где это уместно. Дальнейшее рассмотрение также уделяется структуре, в которой может происходить обработка CT. Для обеспечения клинической эффективности обсуждается концепция медицинской рабочей станции как части распределенной вычислительной сети. Затем некоторое внимание уделяется возможным режимам работы врачей в такой системе.
ВВЕДЕНИЕ
В процессе медицинской диагностики и терапии информация обычно представляется с помощью письменного слова, изображений, графики и устной речи. Для конкретного пациента общая сумма этой информации может быть обозначена как медицинская карта (MR). В интересах системы здравоохранения, ориентированной на пациента, существует ряд важных, если не жизненно важных требований к тому, как информация в MR должна быть организована и использована, например. должно быть
доступ к информации в MR в нужном месте в нужное время нужными людьми,
максимальное использование информации в диагностических и терапевтических целях,
надежное объединение всей информации о пациенте в один МР.
Кроме того, существуют некоторые желательные функции представления и обработки данных для медицинского работника, например. должно быть
однородное, структурированное и простое для понимания представление данных MR,
легко расширяемые MR,
безопасные, защищенные и легкодоступные MR,
средства быстрого сбора статистических данных о MR,
и самое главное
гибкие средства для проведения конференций и консультаций с использованием MR и всех видов связи (т. е. словесное, графическое и голосовое общение).
В этой статье предполагается, что каждое из вышеперечисленных требований к управлению информацией и ее оценке может быть максимально удовлетворено за счет использования медицинских рабочих станций (MWS) в распределенной вычислительной сети.
Разработка такой системы в настоящее время ведется в Институте технической информатики Берлинского технического университета. MWS в основном применяется для лечения неврологических расстройств и включает систему компьютерного управления, обработки и анализа компьютерных томограмм (COMPACT).
Обработка и анализ компьютерных томограмм (КТ) в основном поддерживают требование b). Они рассматриваются в рамках обработки изображений и анализа изображений и обсуждаются соответственно в главах 2 и 3 [разделы, посвященные методам обработки изображений и методам анализа изображений].
Компьютеризированное управление КТ охватывает широкий спектр действий в поддержку всех вышеупомянутых требований и функций для обработки МРТ. Компьютерная графика особенно подходит для функции d) и будет обсуждаться в главе 4 [Раздел о компьютерной графике].
Наш подход к обеспечению функции h) будет описан в главе 5, то есть передаче CT в сети для связи и хранения.
МЕТОДЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ
Методы цифровой обработки изображений, обычно направленные на преобразование одного изображения в модифицированное и улучшенное изображение, при применении к компьютерной томографии должны отвечать следующим требованиям: 1
улучшить изображение с точки зрения способности человеческого восприятия и/или
уменьшить шум и артефакты сканирования и движения и/или
получить более подходящее представление изображения для процесса сегментации.
Достижение наиболее подходящего для врача представления компьютерных томограмм является основным требованием улучшения визуализации содержания анатомической и патологической картины. Для этого может потребоваться сглаживание шума, усиление краев и контраста, а также преобразование псевдоцвета. Когда предполагается автоматический анализ с помощью автономной или онлайновой компьютерной системы, требование c) может быть дополнительно разделено на категории i) улучшение характеристик изображения, например: края и контрасты, а также ii) сокращение данных для ограничения размера матрицы изображения.
Характеристики компьютерной томограммы
Как правило, двухмерное представление изображения содержит искажения, зависящие от процесса формирования изображения. Деградации могут быть смоделированы с помощью функции свертки изображения и аддитивного компонента, шума. Для рентгеновской визуализации в компьютерной томографии может быть несколько источников деградации, например. как часть модуляционной передаточной функции сканера, вызванная рассеянием фотонов при обходе объекта и нелинейностью источника энергии и детекторов, так и влияние на качество изображения алгоритмов восстановления по проекциям. Кроме того, качество изображения зависит от нескольких параметров, в частности от энергии сканирования, количества проекций и пространственного разрешения.
Очевидно, что все параметры сильно зависят от сканера. Текущая работа, включенная в проект COMPACT, сосредоточена на компьютерных томограммах черепа, полученных с помощью сканера EMI CT1010 на кафедре компьютерной томографии Свободного университета Берлина. Компьютерные томограммы представляют собой цифровой двумерный массив с общим размером 160 × 160 элементов изображения (пикселей), каждому из которых соответствует числовое целочисленное значение в диапазоне -1000…1000 (значение HU), которое соответствует средняя плотность структур головного мозга в объемном элементе (вокселе) размером 1,5×1,5×10 мм 3 . Несмотря на двумерное представление компьютерной томограммы, реальная информация на пиксель имеет трехмерную природу.
Сокращение данных
Задачу сокращения данных можно определить как подавление ненужной информации во всей области изображения. В черепных компьютерных томограммах важным структурным содержанием для диагностических и терапевтических целей является распределение значений HU, описывающих коэффициенты затухания ткани головного мозга. Для целей компьютерной обработки полезно уменьшить большое количество битов на томограмму, чтобы обеспечить хранение только сегментов матричных строк, которые относятся к мозгу.
Модуль предварительной обработки для черепных компьютерных томограмм включает в себя сглаживание, обнаружение черепа, обнаружение сегментов линии мозга и вычисление нескольких статистических данных о пикселях мозга. Черепные компьютерные томограммы сохраняются на магнитных лентах процессором сканера EMI CT1010 и считываются ITEL AS-5 факультета компьютерных наук Берлинского технического университета. Полный набор матриц изображения передается на диски графической системы Adage AGT 130 по линии передачи данных 4800 бод. Алгоритмы предварительной обработки были разработаны для обработки в режиме сканирования через программный буфер, содержащий одновременно 5 строк томограммы. Последующая обработка была адаптирована к линейно-ориентированной структуре хранения томограмм на ленте и ограниченному размеру основного ядра системы ADAGE (32 КБ), что не позволяет постоянно хранить в ядре полную матрицу томограммы во время обработки.
Обнаружение черепа выполняется просто путем фиксированного порогового значения сглаженных пикселей в линейном буфере. Фиксированное пороговое значение обеспечивается тем фактом, что кость появляется в постоянном диапазоне значений HU на томограммах. После обнаружения черепа каждая строка, лежащая внутри черепа, проверяется на наличие кандидатов в мозг путем принятия решения о статистике значений HU пикселей в строке. С помощью этого простого и быстрого метода делается различие между мозгом и фоном.Как только сегмент линии мозга обнаружен, в линейном буфере выполняются несколько статистических вычислений:
среднее значение HU и стандартное отклонение значений HU мозга,
гистограмма пикселей мозга первого порядка
центр всей области мозга на томограмме по моментному анализу и
линия симметрии, которая может быть повернута в зависимости от положения пациента в гентри методом главной оси (подробности приведены в 2 ).
После предварительной обработки уменьшенные данные томограммы сохраняются в основном списке резидентов, и на них может ссылаться блок дескриптора строки, содержащий индексы строк и столбцов, за которыми следуют значения HU пикселей.
Предварительная обработка была протестирована на всей базе данных КТ, включая 120 черепных компьютерных томограмм. Результаты обнаружения черепа и подавления фона были очень точными. Предварительная обработка выполняется примерно за 60 секунд, включая доступ к диску и передачу данных с диска на основное ядро.
Улучшение изображения
Ухудшение уровня шума, присущее томограмме, сглаживается с помощью обычного оператора усреднения, определенного в окрестности 3 × 3. Поскольку оператор усреднения никоим образом не адаптирован к конкретному происхождению шума, края в пикселях мозга размыты, а качество изображения в целом ухудшается. 3 Разработка операторов сглаживания, адаптированных к шуму, требует тщательного анализа теоретических предпосылок происхождения и свойств шума в КТ-сканерах. 4
Однако для улучшения КТ-изображений важны не только методы сглаживания, но и методы улучшения КТ-изображений. 5 Они могут либо повысить резкость краев, либо сделать различия в низком контрасте видимыми для врача. Такая процедура может оказать существенную помощь врачу в диагностике низкоконтрастных массовых образований, для которых граница с окружающими тканями может быть нечетко видна. Кроме того, внутреннюю часть низкоконтрастных поражений можно более четко проанализировать после контрастирования или усиления краев.
Кроме того, преобразование псевдоцвета может улучшить видимость нейроанатомических и патологических структур. При выборе схемы преобразования значений серого в псевдоцвета необходимо учитывать, что диапазон цветов не перегружает способности восприятия врача.
Решения некоторых из обозначенных проблем являются частью непрерывного развития системы COMPACT.
МЕТОДЫ АНАЛИЗА ИЗОБРАЖЕНИЯ
В целом было установлено два различных подхода к компьютерному анализу структурного содержания компьютерных томограмм:
интерактивный и
подход к автоматизированному анализу КТ-изображений.
Для достижения оптимального синергизма в интерактивной среде между врачом и компьютерной системой важно тщательно спроектировать модуль связи человек-машина. За последние несколько лет опубликовано множество работ по интерактивному анализу компьютерных томограмм. Введение в вышеупомянутые проблемы дано в 6, обзор можно найти в. 7
Общим для интерактивного и автоматизированного анализа КТ-изображений является акцент на диагностической оценке желудочков головного мозга. Линейные измерения расстояния, полученные с помощью пневмоэнцефалографии, были адаптированы к КТ для описательного анализа атрофических заболеваний и детской гидроцефалии. Чтобы преодолеть их двумерный характер, а также столкнуться с трехмерным характером информации КТ, были предприняты попытки оценить объем желудочка на компьютерных томограммах.
Разработка методов автоматизированного анализа КТ-изображений желудочков головного мозга основана на трех требованиях:
для преодоления утомительной работы по выделению контуров желудочка в диапазоне до 12 срезов томограммы,
для получения точного параметризованного описания трехмерной морфологии желудочков и
чтобы облегчить реалистичную визуализацию сложной желудочковой структуры.
Легко заметить, что
подразумевает автоматическую сегментацию изображений и распознавание объектов,
означает автоматическое определение объема желудочка и
требуется трехмерное отображение с затенением, скрытым отображением и различными преобразованиями изображения, хорошо известными в компьютерной графике.
Сегментация
На выбор подходящей схемы сегментации для КТ черепа повлияли следующие требования к дизайну:
минимум вычислительных затрат и требований к хранилищу во время обработки,
быстрый и, следовательно, довольно «простой» подход,
оптимальная адаптация к линейно-ориентированной структуре хранения компьютерных томограмм.
Подход с динамическим определением порога был выбран (в отличие от подхода с фиксированным порогом в 8 ) и реализован на FORTRAN IV в графической системе ADAGE AGT 130.
Заполненные спинномозговой жидкостью полости, такие как желудочки, цистерны и субарахноидальное пространство, определяются на черепной компьютерной томограмме по характерному диапазону значений HU и хорошо контрастируют с окружающими значениями HU ткани головного мозга. Последняя функция обеспечивает пороговое значение матрицы изображения томограммы с автоматически выбранным диапазоном динамических пороговых значений (было обнаружено, что из-за вариаций диапазона спинномозговой жидкости, зависящих от среза, пациента и энергии сканирования, фиксированное пороговое значение дает неудовлетворительные результаты).
Некоторые соображения следует также уделить процессу создания CT. HU-значения пикселей в матрице двумерной томограммы являются результатом усреднения коэффициентов затухания трехмерного распределения плотности иногда более чем одного материала в пределах одного вокселя размером 1,5 × 1,5 × 10 мм 3 . Таким образом, воксели, определяющие границу мозга/желудочка, могут содержать мозговую ткань, а также спинномозговую жидкость, и поэтому им присваивается более высокое значение HU, чем вокселям, содержащим чисто спинномозговую жидкость (обычно называемые «феноменами частичного объема», количество, например, CSF в пределах одного вокселя называется «отношением частичного объема» pvr). Таким образом, верхняя граница диапазона ЦСЖ определяется максимальным значением HU пикселей, представляющих желудочковую систему.
Для анализа краев желудочка/мозга суммарный градиент вычисляется по всему мозгу на томограмме, и его величина коррелируется со значением HU при соответствующих индексах пикселей с помощью модифицированной двумерной (совместной) гистограммы, следующей за понятие в. 9 Проекция на все максимальные градиенты дает одномерную гистограмму значений HU возможных краевых пикселей. 7
Одна проблема, однако, требует более подробного обсуждения. В идеальном случае результирующая одномерная гистограмма является унимодальной, и ее максимум дает значение HU наиболее часто встречающихся пикселей на границе желудочка/мозга, связанных с максимальными градиентами. Однако край желудочка/мозга в целом имеет непостоянный профиль края из-за разного соотношения парциальных объемов вдоль края (анализ анатомии мозга показывает, что воксели на периферии лобных рогов должны содержать меньше ЦСЖ, чем на периферии третьего желудочка). В общем, гистограмма является бимодальной, относящейся к краевой части, связанной с минимумом, и одной, связанной с максимальным соотношением парциальных объемов. В случаях, когда присутствуют два сильных пика, в качестве порога выбирается впадина гистограммы. Ясно, что такой чисто глобальный анализ для определения порога приводит только к оценке верхней границы порога, поэтому влияние локального контраста игнорируется. Это означает, что в отношении распределения парциальных объемных отношений внутри среза хорошо сегментированы только желудочковая система или наружные ликворные пространства. Если внешние области, содержащие CSF, точно сегментированы, желудочки могут быть в целом слишком большими, и наоборот. Усовершенствованная версия схемы сегментации будет сочетать глобальную статистику по краям, присутствующим в томограмме, и локальные свойства контраста в определенной окрестности пикселей.
Нижняя граница диапазона ЦСЖ выбирается из первой ненулевой записи общей гистограммы мозга с минимальным значением HU. Результаты применения схемы сегментации к компьютерным томограммам на рис. 1a-1f, приведены на фиг. 2а-2е .
Компьютерные томограммы одного из 10 черепов (специально приготовленных для этого эксперимента из вскрытий).
Читайте также: