Как рассчитать Матрицу сходства изображения?
Я читал формулы для вычисления матрицы сродства изображения, и я немного запутался. В идеале я хотел бы использовать интенсивность цвета в качестве метрики расстояния.
Я нашел эту ссылку: http://spectrallyclustered.wordpress.com/2010/06/05/sprint-1-k-means-spectral-clustering/
Который, кажется, делает большую работу по объяснению общего процесса. Мой вопрос касается матрицы сродства.
При построении аффинной матрицы (я назову ее A), они упоминают, что аффинная матрица должна иметь размер KxK для изображения Kxn. Другие эталонные реализации говорят, что матрица сродства для изображения MxN должна быть (M * N) x (M * N):
http://www.mathworks.com/matlabcentral/fileexchange/26354-spectral-clustering-algorithms
Какой традиционный подход?
При вычислении матрицы сродства я хотел знать, является ли каждая запись A(i,j) вычислением окрестности (например, сродством соседства 3x3 или пикселей во всем изображении)?
Или я линеаризую изображение в одномерный массив.
Создает матрицу (m*n) x (m*n) (матрицу сродства) и, перебирая массив одномерных изображений, применяет функцию сродства к пикселю i и каждому другому пикселю j. и сохраняет результат в матрице сродства.
(в основном двойное гнездо для цикла)
я с базы? или это примерно так выглядит?
Заранее спасибо,
Коннектикут
1 ответ
Я думаю, что вы пытаетесь использовать две метрики расстояния с методом, который поддерживает только одну метрику. Изображение имеет неявную пространственную метрику между пикселями, но метод спектральной кластеризации не справляется с этим. Это рассматривает изображение как мешок пикселей.
относительно M
, N
а также K
; M * N = K
, Оба выражения описывают количество объектов, которые будут сгруппированы, что в вашем случае является количеством пикселей.
Матрица сродства, A
является прореженной версией матрицы подобия, S
, Например, если два объекта / пикселя не достаточно похожи, они не являются смежными.
Один из способов построения матрицы смежности заключается в следующем:
S(i, j) = color_intensity_distance( pixel(i), pixel(j) )
A(i, j) = exp( - S(i,j) ), if S(i,j) <= epsilon
A(i, j) = 0, otherwise
Чтобы улучшить вашу производительность, вы должны искать библиотеку разреженных матриц. Они очень эффективны при обработке матриц со многими нулями.