Матрица совпадений Matlab

Я уверен, что это очень простая ошибка где-то у меня! Но когда я использую функцию Matlab graycomatrix, я не получаю ожидаемого результата. Вместо ожидаемого матричного вывода я всегда получаю нулевую матрицу 8 x 8 (почти) с одной записью в правом нижнем углу — обычно равной 16. Я не менял настройки по умолчанию и не использовал «смещение», поэтому я м не слишком уверен, в чем проблема.


person Mike Miller    schedule 17.02.2015    source источник
comment
Как вы это называете, и каков тип (например, двойной) и диапазон значений в вашей входной матрице?   -  person nkjt    schedule 17.02.2015
comment
@nkjt Пробовал это на двойном изображении и простом примере, например. я = [1 1 2; 2 2 3; 1 2 5]; glcm = матрица Грея (I);   -  person Mike Miller    schedule 17.02.2015
comment
ах, я вижу, Андер добрался до меня раньше меня, но да, масштабирование. Это почти всегда масштабирование.   -  person nkjt    schedule 17.02.2015


Ответы (1)


Это потому, что ваше изображение не нормализовано!

Ваше изображение должно быть в диапазоне 0-1, поэтому:

I = [1 1 2; 2 2 3; 1 2 5]; %or any other I
glcm = graycomatrix(I/max(I(:))); % or I/255 , but it would not work for this example

должен сделать работу.

В вашем случае Matlab интерпретирует, что все, что выше 1, равно 1, поэтому матрица совпадения дает вам уникальное значение в максимальной позиции.

person Ander Biguri    schedule 17.02.2015
comment
Ах, я не понимал, что это должно быть нормализовано в первую очередь! :) - person Mike Miller; 17.02.2015
comment
В случае graycomatrix вы также можете использовать 'G',[] в качестве опции для автоматического масштабирования. Это очень похоже на imshow(img,[]) - person nkjt; 17.02.2015
comment
@nkjt ander Должна ли результирующая матрица всегда быть 8 x 8? Насколько я понял, он должен быть таким же большим, как количество уровней серого на вашем изображении. Например, я только что попробовал это на своем изображении, но теперь у меня есть матрица 8 x 8 с 1139783 в качестве записи (1,1) и нулями во всем остальном. Это не так, как я понял, это работает! - person Mike Miller; 17.02.2015
comment
Я предлагаю вам более внимательно прочитать файл справки для graycomatrix. Количество уровней по умолчанию равно 8, поэтому на выходе получается 8 x 8 (все комбинации этих уровней, при условии отсутствия смещений). Это 8, если ваш ввод является числовым (не двоичным/логическим), если вы не установите его как что-то еще. - person nkjt; 17.02.2015
comment
@nkjt Как бы вы интерпретировали такую ​​маленькую матрицу, скажем, если бы у вас было 256 уровней серого? Или было бы более целесообразно установить количество уровней равным количеству уровней серого, чтобы вы могли более четко видеть отношения? Кстати, спасибо за вашу помощь, я бы +1, если бы мог. - person Mike Miller; 17.02.2015
comment
Если у вас есть что-то вроде 256 уровней серого, вы, скорее всего, захотите увеличить размер вашей матрицы серого, используя аргумент «NumLevels». Если у вас нет сильного значения, присвоенного различным уровням серого, хорошим эмпирическим правилом является квадратный корень из числа уровней серого (в данном случае 16)... установка количества уровней на 256 создаст совпадение матрица, которая очень зашумлена и трудна для интерпретации. - person Jim Quirk; 17.02.2015