
Приложение
Функция, реализующая алгоритм сегментации изображения клеток крови с использованием гиперспектральных данных
%%% Определение исходных данных
% dirpath - путь к папке с картинками
dirpath = 'C:\Temp\1\';
filePostfix = 'nm.bmp'; % формат изображений
% набор длин волн в названиях изображений
fstWavelength = 380; % первая длина волны
lstWavelength = 900; % последняя длина волны
difWavelength = 10; % шаг длины волны между соседними изображенияем
width = 342; % ширина изображения
height = 304; % высота изображения
% количество изображений
numPicts = floor((lstWavelength - fstWavelength) / difWavelength);
% гиперспектральный куб (далее гпс-куб)
hsCube = zeros(numPicts, height, width);
%%% Считывание изображений
for l = fstWavelength : difWavelength : lstWavelength
% Определения индекса изображения в гпс-кубе
idx = (l - fstWavelength) / difWavelength + 1;
filename = [dirpath num2str(l) filePostfix]; % имя файла
hsCube(idx, :, :) = rgb2gray(imread(filename));
end;
% Координаты эталонного спектра пропускания клетки (эсп клетки)
ceRow = 4; % строка эсп клетки
ceCol = 78; % столбец эсп клетки
ceLen = numPicts; % длина массива эсп клетки
ceSpectrum = hsCube(:, ceRow, ceCol); % эсп клетки
%%% Сегментация
% map - результат сегментации, который представляет собой
% изображение, где цвета пикселя соответствуют объектам:
% map(i, j) = cellColor - клетки тканей (жёлтый цвет)
% map(i, j) = cytoplasmColor - цитоплазма (синий цвет)
% здесь i и j - произвольные координаты изображения
map = zeros(height, width, 3);
cellColor = [220 220 80]./255; % цвет клетки
cytoplasmColor = [21 171 229]./255; % цвет цитоплазмы
% maxdiff - максимальное отклонение от эталона
% взято из справочника Потолоцкого -> http://goo.gl/eYoroK
maxdiff = 1.4 * 10^9;
for i = 1 : height % бежим по координатам изображения
for j = 1 : width
% берём спектр пропускания текущей точки
cpSpectrum = hsCube(:, i, j);
% diff - отклонение, которое представляет собой
% сумму квадратов разностей квадратов спектров О_о
diff = sum((cpSpectrum.^2 - ceSpectrum.^2).^2);
if diff < maxdiff % если отклонение меньше максимального
map(i, j, :) = cellColor; % значит клетка
else
map(i, j, :) = cytoplasmColor; % иначе цитоплазма
end;
end;
end;
image(map);
Список литературы
Guan Y., Li Q., Wang Y., Liu H., Zhu Z. Pathological leucocyte segmentation algorithm based on hyperspectral imaging technique // Opt. Eng. – 2012. – V. 51(5) – 053202.
Smith R. Introduction to hyperspectral imaging. – NY.:MicroImages, 2006.
Мельников А.В. Формирование и анализ изображений в микроскопии видимой и ИК области спектра методами спектрофотометрии: диссертация на соискание ученой степени кандидата технических наук. СПб: НИУ ИТМО, 2012 - 107 С.
Yana Guan; Qingli Li; Yiting Wang; Hongying Liu and Ziqiang Zhu.
Pathological leucocyte segmentation algorithm based on hyperspectral imaging technique, Opt. Eng. 51(5), 053202 (May 07, 2012). http://dx.doi.org/10.1117/1.OE.51.5.053202
Бутиков Е.И. Оптика. М: Высшая школа, 1986 – 515 с