Сегмент Термографическое Изображение после Сохраняющей Ребро Фильтрации

Этот пример показывает, как работать с тепловыми изображениями, демонстрируя простую сегментацию. Тепловые изображения получены из термографических камер, которые обнаруживают излучение в инфракрасной области значений электромагнитного спектра. Термографические изображения получают инфракрасное излучение, испускаемое всеми объектами выше абсолютного нуля.

Считайте тепловое изображение в рабочую область и используйте whos, чтобы понять больше о данных изображения.

I = imread('hotcoffee.tif');

whos I
  Name        Size              Bytes  Class     Attributes

  I         240x320            307200  single              

Вычислите динамический диапазон, занятый по условию, чтобы видеть область значений температур, занятых изображением. Пиксельные значения в этом изображении соответствуют фактическим температурам в Шкале Цельсия.

range = [min(I(:)) max(I(:))]
range = 1x2 single row vector

   22.4729   77.3727

Отобразите тепловое изображение. Поскольку тепловое изображение является изображением с одинарной точностью с динамическим диапазоном вне от 0 до 1, необходимо использовать возможность автомасштабирования imshow отобразить изображение.

figure
imshow(I,[])
colormap(gca,hot)
title('Original image')

Примените сглаживание сохранения ребра к изображению, чтобы удалить шум при тихом сохранении деталей изображений. Это - шаг предварительной обработки перед сегментацией. Используйте функцию imguidedfilter, чтобы выполнить сглаживание под саморуководством. Параметр 'DegreeOfSmoothing' управляет объемом сглаживания и зависит от области значений изображения. Настройте 'DegreeOfSmoothing', чтобы разместить область значений термографического изображения. Отобразите отфильтрованное изображение.

smoothValue = 0.01*diff(range).^2;
J = imguidedfilter(I,'DegreeOfSmoothing',smoothValue);

figure
imshow(J,[])
colormap(gca,hot)
title('Guided filtered image')

Определите пороговые значения, чтобы использовать в сегментации. Изображение имеет 3 отличных области - человека, активный объект и фон - которые кажутся хорошо разделенными в интенсивности (температура). Используйте multithresh, чтобы вычислить 2-уровневый порог для изображения. Это делит изображение в 3 области с помощью метода Оцу.

thresh = multithresh(J,2)
thresh = 1x2 single row vector

   27.0018   47.8220

Порог изображение с помощью значений, возвращенных multithresh. Пороговые значения в 27 и 48 Цельсия. Первый порог разделяет фоновую интенсивность от человека, и второй порог разделяет человека от активного объекта. Сегментируйте дыры заливки и изображение.

L = imquantize(J,thresh);
L = imfill(L);

figure
imshow(label2rgb(L))
title('Label matrix from 3-level Otsu')

Чертите ограничительную рамку вокруг областей переднего плана в изображении и поместите значение средней температуры области в поле. Пример принимает, что самая большая область является фоном. Используйте функцию regionprops, чтобы получить информацию об областях в сегментированном изображении.

props = regionprops(L,I,{'Area','BoundingBox','MeanIntensity','Centroid'});

% Find the index of the background region.
[~,idx] = max([props.Area]);

figure
imshow(I,[])
colormap(gca,hot)
title('Segmented regions with mean temperature')
for n = 1:numel(props)
    % If the region is not background
    if n ~= idx
        % Draw bounding box around region
       rectangle('Position',props(n).BoundingBox,'EdgeColor','c')
       
       % Draw text displaying mean temperature in Celsius
       T = [num2str(props(n).MeanIntensity,3) ' \circ C'];
       text(props(n).Centroid(1),props(n).Centroid(2),T,...
           'Color','c','FontSize',12)
    end
end

Смотрите также

| | |

Похожие темы