Мера сходства между двумя изображениями

В настоящее время я реализую сегментацию изображений в MATLAB. У меня есть две реализации.

  1. Изображение разделено на две области - передний план и задний план.
  2. Изображение сегментировано более чем на две области - предположим, 3 или 4 сегментированных области.

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

dice = 2*nnz(segIm&grndTruth)/(nnz(segIm) + nnz(grndTruth))

Нажмите здесь

Ожидается, что segIm и grndTruth будут одного размера. Они также должны быть числовыми или логическими.

Однако мне не удалось найти способ применить эту меру для сравнения сходства для многорегиональных сегментированных изображений. Может ли кто-нибудь сказать мне, как я могу использовать коэффициент кубика в моем приложении?

РЕДАКТИРОВАТЬ: Что касается предложений nkjt, я выполнил базовую реализацию и даю результаты ниже. Пожалуйста, не стесняйтесь обновлять код для большей точности.

Я рассматриваю два изображения в виде двух матриц. A - сегментированное изображение, а B - ручная основа. Код Matlab для предложенной выше реализации приведен ниже. Пожалуйста, проверьте и поделитесь своими мыслями.

A=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]
B=[1 3 4 4;1 1 3 4;1 2 3 4;1 2 3 1]
%//First Suggestion
dice = 2*nnz(A==B)/(nnz(A) + nnz(B))
%//2nd Suggestion
A1=(A==1);B1=(B==1);
A2=(A==2);B2=(B==2);
A3=(A==3);B3=(B==3);
A4=(A==4);B4=(B==4);
dice = (2*nnz(A1&B1)/(nnz(A1) + nnz(B1))...
        +2*nnz(A2&B2)/(nnz(A2) + nnz(B2))...
        +2*nnz(A3&B3)/(nnz(A3) + nnz(B3))...
        +2*nnz(A4&B4)/(nnz(A4) + nnz(B4)))/4

Обратите внимание: мне также интересно узнать, можно ли в этом случае применить Измерение расстояния Хаусдорфа как для трехфазных, так и для четырехфазных сегментированных изображений ??

РЕДАКТИРОВАТЬ: у меня есть новый запрос. Если предположить, что изображение имеет 4 области и было правильно сегментировано таким образом, как показано в примере ниже: Если теперь для обозначения разных областей используются разные значения интенсивности, то с использованием коэффициента Dice два сегментированных результата дадут разные результаты. Для Сегментированного Региона 1 у меня кубик = 1 **, а для ** Сегментированного Региона 2 у меня кубик = 0,75. Но оба результата точны. Как я могу изменить свой код так, чтобы сегментированные результаты отражали ответ коэффициентов игральных костей?

введите описание изображения здесь


person roni    schedule 12.11.2013    source источник
comment
Пожалуйста, объясните, как я могу использовать regionprops для сравнения изображений для измерения сходства?   -  person roni    schedule 13.11.2013
comment
возможный дубликат Как проверить точность алгоритма сегментации?   -  person Shai    schedule 14.11.2013


Ответы (2)


Возможно, вы захотите изучить меры, предназначенные для сегментации, такие как нормализованный вероятностный ранг.

Однако я вижу два возможных способа сделать что-нибудь быстро с существующим кодом.

1) Вместо использования логических образов и & используйте:

dice = 2*nnz(segIm==grndTruth)/(nnz(segIm) + nnz(grndTruth));

И segIm, и grndTruth здесь должны быть числовыми (в идеале целыми с областями переднего плана, имеющими значения 1,2,3 ... и т. Д.).

2) Создайте набор двоичных изображений из сегментов segIm и grndTruth для каждой области переднего плана и определите коэффициент игральной кости для каждой.

person nkjt    schedule 12.11.2013
comment
Спасибо, я разберусь. Предположим, что изображение разделено на 4 области, каждая из которых имеет значения 1, 2, 3 и 4 как для основного изображения, так и для сегментированного изображения. Как вы думаете, ваш код будет работать в таком случае? - person roni; 12.11.2013
comment
Не могли бы вы подробнее объяснить свой второй метод? Это действительно помогло бы мне. - person roni; 12.11.2013
comment
Пока изображения одинакового размера, эта строка кода должна работать. Во-вторых, вы можете создать черно-белое изображение просто с помощью чего-то вроде segIm1 = segIm == 1. Тогда коэффициент кубика для segIm1 и grndTruth1 будет соответствовать тому, насколько близка сегментация для области 1 и так далее. Это может быть полезно, если вы ожидаете, что некоторые регионы будет легче сегментировать, чем другие. - person nkjt; 12.11.2013
comment
пожалуйста, проверьте мой отредактированный вопрос. Я постарался реализовать ваши предложения. - person roni; 12.11.2013
comment
Да, выглядит нормально - обратите внимание, что этот тип сравнения не очень устойчив к определенным типам ошибок. Например, если вы хотите подсчитать количество объектов на изображении, у вас должна быть метрика, которая штрафует за ошибки, которые объединяют объекты вместе или разделяют один объект на части. Многое зависит от вашей цели. - person nkjt; 12.11.2013
comment
Спасибо, что проверили мой ответ. Этого вполне достаточно для моей работы. Как вы думаете, из любопытства можно ли применить меру Хаусдорфа в этом случае? - person roni; 12.11.2013
comment
Для сравнения границ? Возможно (опять же, зависит от того, какие изображения и какая метрика важна). Вот пример реализации из литературы: midag.cs.unc.edu/pubs/papers/MICCAI01-gerig-valmet.pdf - person nkjt; 12.11.2013

Работа Arbel´aez et al. описывает несколько методов для сравнения результатов алгоритмов сегментации изображений. См. Раздел 3.1 и его подразделы.

Я считаю, что некоторый код Matlab можно найти на веб-странице проекта < / а>.

Набор данных сегментации Berkeley (bsds500) является хорошо зарекомендовавшим себя эталоном в сообществе сегментов изображений.

person Shai    schedule 12.11.2013