#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 Извините, я вроде как забыл об этом. Но я скорректировал свой ответ. Продолжайте и посмотрите, соответствует ли это вашим потребностям сейчас.