Как я могу найти граничную поверхность на этом изображении

#matlab #image-processing

#matlab #обработка изображений

Вопрос:

Я новичок в обработке изображений. Я хочу найти поверхность между черными и белыми пикселями, которая их разделяет. Вот ссылка на изображение. Размер изображения равен (21 900 900)

https://drive.google.com/file/d/1zUWK0Fb_n6f1JZou5mrUJq0x3h2X8mBK/view?usp=sharing

Я попытался использовать команду boundarymask из MATLAB в одной плоскости изображения, но я получаю шум, а также это работает только для 2d-изображения. Пожалуйста, подскажите мне, как найти граничную 3D-поверхность здесь. Спасибо. Это выходное изображение после применения boundarymask.

Как найти границу поверхности между белым и черным

Комментарии:

1. После удаления шума способом, аналогичным предложенному Max (хотя вместо этого я бы использовал 3D медианный фильтр), примените эрозию с помощью ядра 3x3x3. Разница между изображением и размытым изображением — это поверхность, которую вы ищете.

Ответ №1:

Вашим первым шагом должно быть избавление от вашего шума. Поскольку у вас есть какой-то шум соли и перца, вы можете исправить это, используя медианный фильтр для 2D-изображения с medfilt2() в matlab. После этого вы можете использовать разделитель границ, чтобы найти свои граничные пиксели. Код для этого может выглядеть следующим образом. Если вам нужна поверхность, вам нужно выполнить цикл поверх 3-го измерения вашего 3D-изображения. Код будет выглядеть следующим образом:

 for ii=1:16
    I=imread('image.tif',ii);
    I_bs=boundarymask(I);
    I_filt=medfilt2(I_bs,[7 7]);
    boundarysurface(:,:,ii)=edge(I_filt,'Canny');
end
  

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

Комментарии:

1. Я думаю, вы что-то упустили из виду. Мое входное изображение в формате 3d прикреплено по ссылке на Google Диске. Показанное изображение является выходным изображением после применения к маске границы. Край в 2d становится поверхностью в 3d. Спасибо за ответ. Я попытаюсь предварительно обработать с помощью медианного фильтра.

2. ну, в таком случае я не совсем понимаю вашу проблему. Вы хотели граничную поверхность, вы получили граничную поверхность. Если вы хотите избавиться от шума на поверхности, примените medfilt2, который я предложил. что еще вам нужно?

3. @user3704712 Хорошо, я думаю, что теперь я понял, что вы хотите. Это изображение граничной маски для одного из 21 уровня первого измерения вашего изображения, и вы хотите, чтобы поверхность располагалась на всех 21 уровне изображения, верно? Если да, я могу изменить свой ответ, чтобы соответствовать этим потребностям позже

4. Да, вы правы. Я хочу, чтобы поверхность располагалась на всех 21 уровне изображения. Извините за поздний ответ.

5. @user3704712 Извините, я вроде как забыл об этом. Но я скорректировал свой ответ. Продолжайте и посмотрите, соответствует ли это вашим потребностям сейчас.