2013-04-04 6 views
5

Вопрос

У меня есть последовательность изображений, представляющая информацию о глубине, которую я хотел бы очистить. Есть некоторые выбросы (значения с интенсивностью ниже 25, для диапазона 0-255), которые я хотел бы заполнить приемлемой альтернативой (среднее значение, локализованное в этой конкретной области, может быть хорошим предположением).Удаление выбросов из серого изображения

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

Basic trial

P.S. Кто-то уже предложил мне использовать быструю реконструкцию сейсмического импульса, но я бы не знаю, с чего начать ...

Реализовано решение (до сих пор)

Решение я реализовал (прежде чем читать о inpaint_nans предложил по tmpearce):

  1. дублировать оригинальное изображение;
  2. заполнение недопустимых пикселей общим средним значением;
  3. использовать круговой диск луча 10 для размытия его;
  4. замена недопустимых значений в исходном изображении с тем, что я получил от точки 3.
  5. запустить медианный фильтр размера 10.
img2 = img;          
img2(img < .005) = mean(img(:));     
H = fspecial('disk',10);       
img3 = imfilter(img2,H,'symmetric');    
img4 = img;          
img4(img < .3) = img3(img < .3);     
filterSize = 10;         
padopt = {'zeros','indexed','symmetric'};   
IMG = medfilt2(img4, [1 1]*filterSize, padopt{p}); 

Second trial

ответ

7

Я рекомендую inpaint_nans вклад MATLAB File Exchange - начните, как вы уже сделали, заменив выбросы NaN и воспользуйтесь ссылкой для перехода оттуда.

Из описания функции:

элементов Интерполировать NaN в 2-й массив с использованием элементов, не NaN. Может также экстраполировать, так как он не использует триангуляцию данных. Inpaint_nans предлагает несколько различных подходов к интерполяции, , которые дают компромиссы с точностью в зависимости от скорости и требуемой памяти. Все методы, найденные в настоящее время inpaint_nans, основаны на разреженной линейной алгебре и дискретизации PDE. По существу, PDE решается как в соответствии с предоставленной информацией.

Hooray для многоразового использования код!

+5

мои мысли точно, только 20 секунд слишком поздно. +1 – bla

4

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

Код:

testimage = imread('BAPz5.png'); 
testimage = double(rgb2gray(testimage)); 
testimage_filt = roifill(testimage,imdilate(testimage<100,true(4))); 
figure(1); 
subplot(1,2,1); 
imshow(testimage,[]); 
subplot(1,2,2); 
imshow(testimage_filt,[]); 

Выход:

enter image description here

1

Сообщение ответа, но только для записи, в [1], автор на основе базового принципа естественных форм, т. е. объекты следуют гладкости второго порядка, он предлагает метод окраски, который минимизирует кривизну в смысле наименьших квадратов . Он также предлагает code. Удачи.

[1] Α Categoty уровня 3-D объектов базы данных: Ввод kineckto Работа (ICCV)

enter image description here

+0

Обратите внимание, что [ответы только для ссылок не рекомендуется] (http://meta.stackoverflow.com/tags/link-only-answers/info), ответы SO должны быть конечной точкой поиска решения (а также еще одна остановка ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

+0

Это потрясающе! Спасибо ** Darkmoor ** за вашу заметку! Всегда приятно получить мнение другого, поддерживаемого бумагой! – Atcold

Смежные вопросы