Как сегментировать часть движущегося изображения на основе деталей неподвижного изображения в MATLAB?

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

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

Чтобы помочь с идеей, вот некоторые из этих снимков МРТ1:

Фиксированное изображение:

http://www.imagesup.net/?di=813896074669

Движущееся изображение:

http://www.imagesup.net/?di=16138960757914

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

Любые идеи/предложения относительно того, как это можно сделать?

1. Как новый пользователь, я не могу публиковать/прикреплять более 2 ссылок/изображений, но дайте мне знать, если вам понадобятся дополнительные изображения.


person Dante    schedule 13.01.2014    source источник
comment
DE, ваш пост немного выходит за рамки; SO для небольшого ответа. У вас возникла проблема с обработкой изображений (сегментация). Много кода можно найти на странице mathworks.com/matlabcentral. . Попробуйте, например, mathworks.com/matlabcentral/fileexchange/. Ограничьте ответ несколькими вариантами, тогда ребята вам помогут; на данный момент вопрос слишком расплывчатый.   -  person venergiac    schedule 13.01.2014
comment
Спасибо за ваш ответ venergiac. Я пробовал каждый связанный код по вашим опубликованным ссылкам, прежде чем я пошел сюда, и соответствующим образом скорректировал их, но все равно безрезультатно. Как указано выше, я пытаюсь сегментировать часть движущегося изображения, сначала создавая и регистрируя фиксированную границу изображения (белую рамку). Я думаю, что алгоритм должен иметь возможность сравнивать функцию из этой белой рамки (также может быть любого цвета) с функцией (или любыми связанными деталями) с движущимся изображением и соответствующим образом выполнять сегментацию (красная рамка). Вот пример: imagesup.net/?di=1313896266994   -  person Dante    schedule 13.01.2014
comment
Сейчас может быть немного поздно, но я могу судить по комментарию о награде, что существующего ответа было недостаточно. Однако, не показывая, что вы получили из этого ответа, и не указывая, что именно вы хотели бы изменить, трудно его улучшить.   -  person Dennis Jaheruddin    schedule 22.01.2014


Ответы (1)


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

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

I1=imread('fixed.png');
I2=imread('moving.png');

model=im2bw(I1,0.54);

imshowpair(I1,Model);

Это простая сегментация с пороговым значением для выделения этого пятна в середине изображения. Значение 0,54 было получено путем возни, вы, безусловно, можете лучше сегментировать фиксированное изображение.

Вот сегментированное фиксированное изображение, фиолетовое внутри, зеленое снаружи.

Сегментированный фиксированный

Теперь давайте деформируем эту маску, чтобы она соответствовала перемещенному изображению:

masked = activecontour(I2,model, 20, 'Chan-Vese');
imshowpair(I2,masked);

Результат:

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

Вы можете автоматизировать это в цикле по всем вашим изображениям, деформируя каждую последующую маску до следующего кадра. Попробуйте также другие параметры activecontour.

Редактировать здесь — это еще один способ, который я могу придумать:

В следующем коде Istart — это исходное фиксированное изображение, Mask — это сегментированная область на этом изображении (тот, который вы назвали «фиксированным» в своем вопросе), а Istep — это перемещенное изображение.

Сначала я превратил сегментированную область в бинарную маску, в этом нет строгой необходимости:

t=graythresh(Mask);
BWmask=im2bw(Mask, t);

Давайте отобразим замаскированное исходное изображение:

imshowpair(BWmask, Istart)

маскированный запуск

Следующим шагом было вычисление регистрации на основе интенсивности между начальным и ступенчатым изображениями:

[optimizer, metric] = imregconfig('monomodal');
optimizer.MaximumIterations = 300;

Tform=imregtform(Istart, Istep, 'affine', optimizer, metric);

И деформируйте маску в соответствии с этим преобразованием:

WarpedMask=imwarp(BWmask, Tform, 'bicubic', 'Outputview', imref2d(size(Istart)));

Теперь давайте посмотрим на результат:

imshowpair(WarpedMask, Istep);

маскированный шаг

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

Удачи!

person Cape Code    schedule 13.01.2014
comment
Спасибо за ваши усилия Джигг. Мой запрос может показаться читателям довольно расплывчатым, но вот еще один пример того, на что должен быть способен окончательный алгоритм: imagesup.net/?di=1313896332618 - person Dante; 13.01.2014
comment
1) Извлеките фиксированную границу изображения (согласно 1-му изображению в приведенной выше ссылке) и смешайте или наложите границу на движущееся изображение (2-е изображение). 2) Сегментируйте ROI движущегося изображения в соответствии с деталями фиксированного изображения. - person Dante; 13.01.2014
comment
Чтобы эффективно сократить затраты на вычисления/итерации, я использовал одно изображение в наборе данных в качестве шаблона (или фиксированного изображения), поскольку пространственная информация в этом шаблоне может быть полезна до сегментации других движущихся изображений в наборе данных. Это фиксированное изображение также является моей областью интереса и было полуавтоматически сегментировано, но из-за ограничений времени и усилий область интереса движущихся изображений должна быть сегментирована автоматически на основе деталей фиксированного изображения. Вот еще один пример: imagesup.net/?di=3138970090110. - person Dante; 14.01.2014
comment
@user3177422 user3177422 Да, я прекрасно понимаю, что вы хотите сделать. Деформируйте исходную форму, чтобы сегментировать другие изображения. Если activecontour не решает вашу проблему, вы можете изучить алгоритмы увеличения региона. - person Cape Code; 14.01.2014
comment
Спасибо jigg за ваш вклад, однако я тоже пробовал этот метод (метод выращивания областей), и, вероятно, единственный метод, который мог бы сделать это правильно, - это метод регистрации изображений, в котором я очень слаб. - person Dante; 14.01.2014
comment
@user3177422 user3177422 Можете ли вы предоставить исходное (полное) изображение, из которого получено ваше сегментированное фиксированное изображение? Думаю, у меня может быть идея. - person Cape Code; 14.01.2014
comment
@user3177422 user3177422 посмотри мои правки, надеюсь, это поможет, к сожалению, я больше не смогу тратить на это время. - person Cape Code; 14.01.2014
comment
как вы сказали, это не идеально, и хотя я ранее играл с функцией imregtform, и результаты, которые я получил, сравнимы с вашими, но все же ваш метод совершенно другой, простой, но стимулирующий. ваши усилия и время очень ценятся jigg. - person Dante; 14.01.2014