Доля_ПГ_Радон МатЛаб (857495)
Текст из файла
Доля П.Г.Харьковский Национальный Университетмеханико – математический факультет2012 г.Математические методы компьютерной томографии.Перед вами брошюра, которая является частью пособия «Математическиеметоды компьютерной томографии». Она знакомит студентов с функциямиMATLAB, используемыми при вычислении и визуализации прямого иобратного двумерного преобразования Радона – математического метода,лежащего в основании томографии. Приведен также параграф, в которомсодержатся примеры (в основном построения графиков), рассмотренныенами в других частях пособия. Многие описываемые здесь функцииотносится к пакету расширения Image Processing Toolbox.
Однакодля понимания излагаемого материала необходимы базовые знания по работев MATLAB.Часть 2. Преобразование Радона в MATLABОглавление1. Построение Радоновских образов и прообразов по аналитическимформулам............................................................................................................ 12. Полезные графические функции ................................................................. 13. Прямое преобразование Радона. Функция radon. ...................................... 94. Обратное преобразование Радона.
Функция iradon................................. 161. ПостроениеРадоновскиханалитическим формулам.образовипрообразовпоВ предыдущих частях пособия рассмотрено большое количество примеровпостроения изображений и радоновских проекций. После получения формулмы часто приводили графический образ. Здесь будут приведены примерыMatLab, с помощью которых выполнялась такая визуализация.2.
Полезные графические функцииПонимание двух функций MatLab radon и iradon, используемых длявычисления прямого и обратного преобразования Радона, невозможно безнаглядного представления результатов их работы. В настоящем параграфемы рассматриваем некоторые графические функции, которые наиболее частоиспользуются в этом случае. Вот функции, которые рассматриваются в этомпараграфеimread('файл',...)- чтение графического файлаimfinfo('файл',...) - информация о графическом файлеimage(матрица,...)- нарисовать образ матрицыcolormap(матрица(m x 3))imshow(матрица,...)imagesc(матрица,...)surface(матрица,...)surf(матрица,...)mesh(матрица,...)Графический файл в MATLAB представляется в виде матрицы с элементами,являющимися целыми числами, которые являются индексами (номерами)цветов в матрице называемой картой или палитрой цветов (colormap).
ВMATLAB есть функции чтения графических файлов и отображенияполученных матриц. Рассмотрим для примера рисунок, который находится вграфическом файле Pogorelov32x32.bmp, размером 32 на 32 пикселя.КомандаA=imread('Pogorelov32x32.bmp')читает и печатает матрицу A размером 32 x 32. Значения элементов матрицыявляются номерами цветов соответствующих пикселей. Вот кусочек этойматрицы15 15 15 15 0 0 0 0 0 1 6 …15 0 0 6 0 7 7 8 8 8 8 …15 15 0 0 0 1 7 8 7 8 8 …15 7 0 2 1 7 7 8 8 8 8 …15 5 0 7 0 7 7 8 8 8 8 ………………………………………………….Командаimage(A);по этой матрице рисует картинку в графическом окне (см.
рисунок слева).Рисунок не очень хорош и для получения приемлемого изображения нампотребуется изменить параметры его отображения.Когда матрица содержит целые положительные числа, то ее элементыинтерпретируются как индексы в карте цветов. Функция image(A) строитее образ в текущей карте – каждому элементу матрицы будет соответствовать2некоторый прямоугольник на рисунке, закрашенный цветом, номер которогосоответствует строке матрицы цветов (палитра). Имеются такжедополнительные аргументы, управляющие работой функции image.Полученным образом в графическом окне, можно управлять, используяобычные функции MatLab, управляющие графикой.
В частности, в нашемпримере рисунок вытянут по горизонтали. Командаaxis equal;выравнивает горизонтальные и вертикальные размеры пикселей вграфическом окне. Она устанавливает коэффициент сжатия изображенияодинаковым по всем осям (см. предыдущий рисунок справа). Тот жерезультат дает командаaxis image;но охватывающий изображение прямоугольник в графическом окнедеформируется под размер изображения.Цвета точек берутся из текущей карты цветов.
Карта цветов (палитра)– это матрица, которая содержит 3 столбца и несколько (может быть много)строк. Например, командаgray(5)создает следующую матрицу, которая может быть использована как палитрацветов00.25000.50000.75001.000000.25000.50000.75001.000000.25000.50000.75001.0000Карта цветов colormap является m × 3 матрицей вещественных чиселдиапазон изменения которых от 0 до 1.
Каждая ее строка является RGBвектором, определяющим один цвет. Строка карты цветов с номером kопределяет k – й цвет в формате [r (k ) g (k ) b(k )] с соответствующимиинтенсивностями красного r(k), зеленого g(k) и синего b(k) цветов.Мы видели, что матрица A, прочитанная из файла, содержит числа от 0до 15, поэтому создадим черно – белую палитру с 16 оттенками серого.Командаcolormap(gray(16));преобразует рисунок к следующему видуОбратите внимание на тип элементов матрицы A в окне Workspace – uint8(беззнаковые 8 – битные целые могут изменяться в диапазоне от 0 до 255).Если выполнить командуB=A/15;то операция деления даст только 0 или 1, а тип элементов матрицы B неизменится (целое разделить на целое дает целое).
Это позволяет создать3черно – белый рисунок. Для этого создадим палитру из двух цветов – черного(ему соответствует строка 0, 0. 0) и белого (ему соответствует строка 1, 1, 1).cm=[0 0 0;1 1 1];% матрица палитры (два цвета – черныйи белый)image(B);axis image; colormap(cm);Командаcolormap('default')устанавливает карту цветов по – умолчанию.Графический файл мог сразу быть монохромным. Например, авторсоздал в Paint-е черно-белую картинку 32 x 32 пикселя PeterMono1.bmpКомандаP=imread('PeterMono1.bmp')прочитала и отпечатала матрицу 32 x 32 пикселя, составленную только изнулей или единиц.
Командаimage(P);axis image; colormap('default');нарисовала очень темную картинку. Но командыcm=[0 0 0;1 1 1];colormap(cm);преобразуют картинку к виду, который показан выше.Чтобы узнать формат графического файла можно использовать командуinfo = imfinfo('Pogorelov32x32.bmp')Она возвращает структуру с большим количеством полей, содержащуюразличную информацию о графическом файле. Здесь мы приводимнекоторые поля этой структурыinfo =Filename:FileSize:Format:FormatVersion:Width:Height:BitDepth:ColorType:NumColormapEntries:Colormap:NumPlanes:'Pogorelov32x32.bmp'630'bmp''Version 3 (Microsoft Windows 3.x)'32324'indexed'16[16x3 double]1.................Команда [X,map] = imread(filename) читает графический файл вматрицу X, а его карту цветов в матрицу map, элементы котороймасштабируются к диапазону [0, 1].[A,m] = imread('Pogorelov32x32.bmp');image(A);colormap(m);4Команда[A,map,alpha] = imread(...)в третьем параметре возвращает маску (матрицу из логических нулей иединиц), которая используется для определения информации о прозрачноститочек образа (какие точки образа отображать на экране, а какие нет; неотображать те, для которых элементы C равны 1).
Например, этот параметрполезен для рисования образа файла иконки.[A,B,C]=imread('Peter1.ico'); % A содержит числа от 0 до 255.image(A); axis image;% левый рисунокcolormap(B);% средний рисунокТеперь сделаем фон рисунка белым.B2=B;B2(256,:)=[1 1 1];% последний цвет палитры сделать белым цветомD = ones(size(A)) * (length(B2)-1); %создать матрицу с элементами 255D(C == 0) = A(C == 0);image(uint8(D)), colormap(B2); %правый рисунокaxis image;Поясним работу строки D(C==0)=A(C==0).Если посмотреть в окне Workspace, то видно, что массив C являетсялогическим. И при этом он имеет такой же размер, что и массив A.
Здесьиспользуется логическое индексирование в формеимя_матрицы(логический массив)где логический массив должен иметь тот же размер, что и матрица.Результатом этой операции логического индексирования является вектор,составленный из элементов исходной матрицы, для которых в логическоммассиве соответствующие элементы равны логической единице. Этот векторможет стоять как в правой части оператора присваивания, так и в левой.Вначале мы создали double массив D из чисел 255, а затем создали вектораодинаковой длины D(C==0) и A(C==0). Второй вектор содержит толькоэлементы матрицы A, для которых в матрице C элементы равны нулю. Этозначит, что соответствующие точки образа должны быть нарисованы.Значения этого вектора A(C==0) присваиваются элементам вектораD(C==0), т.е.
соответствующим элементам матрицы D. Если в матрице Cэлемент был 1, то соответствующий элемент матрицы D не меняется, т.е.остается равным 255. В результате элементы матрицы A, отвечающиеотображаемым точкам, скопировались в матрицу D, а отвечающиенеотображаемым точкам остались в матрице D равными 255. Кроме того, нампотребовалось заменить последнюю (256 – ю) строку матрицы палитры,чтобы она соответствовала белому цвету.
Поскольку функция imageотображает только матрицы с типом элементов uint8 (диапазон изменения5чисел от 0 до 255), то нам также потребовалось преобразование типавещественной матрицы D в тип uint8.Команда image(x,y,C), где x и y являются двухэлементными векторами,которые определяют диапазон изменения координат x и y, рисует такой жеобраз, что и команда image(C). Это бывает полезно, например, в случае,когда вы желаете, чтобы метки осей соответствовали реальным физическимкоординатам графического образа.A = magic(5);x = [-2.5 2.5];y = [0.5 5.5];image(x,y,A), axis image, colormap(jet(25))Функция imshow(M) тоже строит графический образ полутоновой (т.е.одноцветной с различными градациями яркости) матрицы M элементыкоторой имеют тип double.
При этом каждой точке матрице соответствуетодин пиксель в графическом окне. Вариантов использования этой функцииочень много. Она является базовой графической функцией пакета ImageProcessing Toolbox. С различными вариантами ее использованияследует ознакомиться по справочной системе.I = zeros(4,4) % генерирование нулевой матрицы размером 4 x 4I =0000000000000000I(2:3, 2:3) = 1% изменение значений матрицыimshow(I);% построение образа матрицыI =0000011001100000Здесь единицы в матрице I соответствуют белым точкам рисунка, а нули –черным.
Но точек мало, поэтому рисунок маленький. Если бы мыиспользовали функцию image, то нам надо было бы выполнитьпреобразование типа, например, так image(uint8(I)), но при этом образматрицы был построен по размеру графического окна. Увеличим размеррисунка, увеличив размер матрицыI = zeros(100,100);I(25:75, 25:75) = 1;colormap('default');imshow(I);% следующий рисунок слеваcolormap(hot); % следующий рисунок справа6Слово hot представляет имя предопределенной матрицы палитры. Именаготовых матриц палитр можно найти в справочной системе.
Вот еще примериспользования функции imshow.moon = imread('moon.tif');imshow(moon);или можно сразу передать имя файлаimshow('moon.tif');imshow(I,[low high]) рисует образ I в серых оттенках с диапазономизменения значений I равным [low high]. Значение low и меньшие егорисуются черным цветом, значение high и большие его рисуются белым.Значения между рисуются промежуточными оттенками серого, используяуровни серого определяемые по – умолчанию. Если используется пустаяматрица [] вместо [low high], то imshow использует [min(I(:))max(I(:))], т.е. минимальное значение в I отображается черным, амаксимальное – белым цветами.Угадывать палитру или использовать палитру графического файла не всегдаудобно. Поэтому в MatLab есть функция imagesc, которая масштабируетматрицу под текущую палитру и затем рисует ее образ.Команда imagesc(A) отображает матрицу как графический образ.Каждый элемент матрицы соответствует прямоугольному участку образа.Значения элементов являются индексами строк текущей матрицы палитры, атройка чисел этой строки в формате RGB определяет цвет такогопрямоугольника.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.