exponenta event banner

graycomatrix

Создание матрицы совместного вхождения серого уровня на основе изображения

Описание

glcms = graycomatrix(I) создает матрицу совместного вхождения серого уровня (GLCM) из изображения I. Другое имя матрицы совместного вхождения серого уровня - матрица пространственной зависимости серого уровня.

graycomatrix создает GLCM, вычисляя, как часто пиксель со значением i уровня серого (интенсивность оттенков серого) возникает горизонтально рядом с пикселем со значением j. (Другие пространственные отношения пикселей можно задать с помощью 'Offsets' параметр.) Каждый элемент (i, j) вglcm определяет количество случаев, когда пиксель со значением i находился горизонтально рядом с пикселем со значением j.

пример

glcms = graycomatrix(I,Name,Value) возвращает одну или несколько матриц совместного вхождения серого уровня в зависимости от значений необязательных аргументов пары имя-значение.

пример

[glcms,SI] = graycomatrix(___) возвращает масштабированное изображение, SI, используется для вычисления матрицы совместного вхождения серого уровня.

Примеры

свернуть все

Чтение изображения в градациях серого в рабочую область.

I = imread('circuit.tif');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Вычислите матрицу совместного вхождения серого уровня (GLCM) для изображения в оттенках серого. По умолчанию graycomatrix вычисляет GLCM на основе горизонтальной близости пикселей [0 1]. Это пиксель рядом с интересующим пикселем в той же строке. В этом примере указывается другое смещение: две строки в одном столбце.

glcm = graycomatrix(I,'Offset',[2 0])
glcm = 8×8

       14205        2107         126           0           0           0           0           0
        2242       14052        3555         400           0           0           0           0
         191        3579        7341        1505          37           0           0           0
           0         683        1446        7184        1368           0           0           0
           0           7         116        1502       10256        1124           0           0
           0           0           0           2        1153        1435           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

Создайте простой массив образцов 3 на 6.

I = [ 1 1 5 6 8 8; 2 3 5 7 0 2; 0 2 3 5 6 7]
I = 3×6

     1     1     5     6     8     8
     2     3     5     7     0     2
     0     2     3     5     6     7

Вычислите матрицу совместного вхождения серого уровня (GLCM) и верните масштабированное изображение, использованное при вычислении. Путем указания пустых скобок для GrayLimits параметр в примере использует минимальное и максимальное значения оттенков серого во входном изображении в качестве пределов.

[glcm,SI] = graycomatrix(I,'NumLevels',9,'GrayLimits',[])
glcm = 9×9

     0     0     2     0     0     0     0     0     0
     0     1     0     0     0     1     0     0     0
     0     0     0     2     0     0     0     0     0
     0     0     0     0     0     2     0     0     0
     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     2     1     0
     0     0     0     0     0     0     0     1     1
     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     1

SI = 3×6

     2     2     6     7     9     9
     3     4     6     8     1     3
     1     3     4     6     7     8

Считывание изображения в градациях серого в рабочую область.

I = imread('cell.tif');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Определите четыре смещения.

offsets = [0 1; -1 1;-1 0;-1 -1];

Вычислите GLCM, вернув также масштабированное изображение. Отображение масштабированного изображения, выполнение дополнительного масштабирования значений данных в диапазоне [0, 1].

[glcms,SI] = graycomatrix(I,'Offset',offsets);
imshow(rescale(SI))

Figure contains an axes. The axes contains an object of type image.

Обратите внимание, как функция возвращает массив из четырех GLCM.

whos
  Name           Size              Bytes  Class     Attributes

  I            159x191             30369  uint8               
  SI           159x191            242952  double              
  glcms          8x8x4              2048  double              
  offsets        4x2                  64  double              

Чтение изображения в градациях серого в рабочую область.

I = imread('circuit.tif');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Вычислите GLCM с помощью Symmetric , возвращая также масштабированное изображение. GLCM, созданный при установке Symmetric кому true симметричен по своей диагонали и эквивалентен GLCM, описанному Хараликом (1973).

[glcm,SI] = graycomatrix(I,'Offset',[2 0],'Symmetric',true);
glcm
glcm = 8×8

       28410        4349         317           0           0           0           0           0
        4349       28104        7134        1083           7           0           0           0
         317        7134       14682        2951         153           0           0           0
           0        1083        2951       14368        2870           2           0           0
           0           7         153        2870       20512        2277           0           0
           0           0           0           2        2277        2870           0           0
           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0

Отображение масштабированного изображения, выполнение дополнительного масштабирования значений данных в диапазоне [0, 1].

imshow(rescale(SI))

Figure contains an axes. The axes contains an object of type image.

Входные аргументы

свернуть все

Входное изображение, указанное как 2-D числовая матрица или 2-D логическая матрица.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'Offset',[2 0]

Диапазон, используемый для масштабирования входного изображения на серые уровни, заданный как 2-элементный вектор [low high]. Если N - количество серых уровней (см. параметр 'NumLevels') для использования при масштабировании, диапазон [low high] делится на N ячейки и значения равной ширины в ячейке отображаются на один серый уровень. Значения оттенков серого меньше или равны low масштабированы до 1. Значения оттенков серого больше или равны high масштабированы до 'NumLevels'. Если'GrayLimits' имеет значение [], graycomatrix использует минимальное и максимальное значения оттенков серого в I в качестве пределов, [min(I(:)) max(I(:))], например, [0 1] для класса double и [-32768 32767] для класса int16.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Количество уровней серого цвета, указанное как целое число. Например, если NumLevels равно 8, graycomatrix масштабирует значения в I таким образом, они являются целыми числами между 1 и 8. Количество уровней серого определяет размер матрицы совместного вхождения уровня серого (glcm).

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Расстояние между интересующим пикселем и его соседом, определяемое как массив p-by-2 целых чисел. Каждая строка в массиве является двухэлементным вектором, [row_offset, col_offset], которая задает отношение или смещение пары пикселей. row_offset - количество строк между интересующим пикселем и его соседом. col_offset - количество столбцов между интересующим пикселем и его соседом. Поскольку смещение часто выражается в виде угла, в следующей таблице перечислены значения смещения, которые задают общие углы, учитывая расстояние в пикселах D.

Угол

Смещение

0

[0 D]

45

[-D D]

90[-D 0]
135[-D -D]

На рисунке показан массив: offset = [0 1; -1 1; -1 0; -1 -1]

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Рассмотрим упорядочение значений, указанных как логическое значение true или false. Например, когда 'Symmetric' имеет значение true, graycomatrix подсчитывает как 1,2, так и 2,1 пары при вычислении количества раз, когда значение 1 соседствует со значением 2. Когда 'Symmetric' имеет значение false, graycomatrix только 1,2 или 2,1, в зависимости от значения 'offset'.

Типы данных: logical

Выходные аргументы

свернуть все

Матрица совместного вхождения серого уровня (или матрицы), возвращаемая как NumLevelsоколо-NumLevelsоколо-P массив, где P - количество смещений в Offset.

Типы данных: double

Масштабированное изображение, используемое при вычислении GLCM, возвращаемое в виде цифровой матрицы того же размера, что и входное изображение. Значения в SI находятся между 1 и NumLevels.

Типы данных: double

Алгоритмы

graycomatrix вычисляет GLCM из масштабированной версии изображения. По умолчанию, если I является двоичным изображением, graycomatrix масштабирует изображение до двух уровней серого. Если I - изображение интенсивности, graycomatrix масштабирует изображение до восьми уровней серого. Можно указать количество уровней серого цвета graycomatrix используется для масштабирования изображения с помощью 'NumLevels' параметр и способ, которым graycomatrix масштабирует значения с помощью 'GrayLimits' параметр.

На следующем рисунке показано, как graycomatrix вычисляет несколько значений в GLCM изображения 4 на 5 I. Элемент (1,1) в GLCM содержит значение 1 поскольку в изображении имеется только один экземпляр, где значения имеют два расположенных горизонтально соседних пикселя 1 и 1. Элемент (1,2) в GLCM содержит значение 2 потому что в изображении есть два экземпляра, где значения имеют два соседних по горизонтали пикселя 1 и 2. graycomatrix продолжает эту обработку для заполнения всех значений в GLCM.

graycomatrix игнорирует пары пикселей, если любой из пикселей содержит NaN, заменяет положительный Infs со значением NumLevels, и заменяет отрицательное Infs со значением 1. graycomatrix игнорирует пикселы границы, если соответствующий соседний пиксель выходит за границы изображения.

GLCM, созданный при 'Symmetric' имеет значение true симметричен по своей диагонали и эквивалентен GLCM, описанному Хараликом (1973). GLCM, созданный с помощью следующего синтаксиса: 'Symmetric' установить в значение true

 graycomatrix(I, 'offset', [0 1], 'Symmetric', true)

эквивалентно сумме двух GLCM, полученных следующими утверждениями, где'Symmetric' имеет значение false.

graycomatrix(I, 'offset', [0 1], 'Symmetric', false) 
graycomatrix(I, 'offset', [0 -1], 'Symmetric', false)

Ссылки

[1] Харалик, Р.М., К. Шанмуган и И. Динштейн, «Текстурные особенности классификации изображений», IEEE Transactions on Systems, Man, and Cybernetics, Vol. SMC-3, 1973, pp. 610-621.

[2] Haralick, R.M., и Л.Г. Шапиро. Компьютер и робот зрение: Том 1, Аддисон-Уэсли, 1992, с. 459.

Представлен до R2006a