Arhn - архитектура программирования

Лучший способ найти край шумового изображения

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

  1. Сгладьте изображение, используя фильтр Гаусса G
  2. Найдите ребро на основе уравнения

    g=1/(1+β∇ (I*G)^2)

где G — фильтр Гаусса. β — вес для контроля уровня шума.

Однако фильтр Гаусса является причиной потери края изображения. Я хочу найти лучший метод, который может сохранить информацию о границах. Не могли бы вы предложить мне лучший способ найти край этого изображения?

Это мой результат для вышеуказанных шагов

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

Вот изображение, над которым я работаю с добавленным шумом:

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

Чтобы получить края, это код MATLAB, который я написал:

beta=0.01;
G = fspecial('gaussian',[3 3],1);
I_G = conv2(I,G,'same');
[Gx,Gy] = gradient(I_G);
NormGrad = sqrt(Gx.^2 + Gy.^2); 
g = 1./ (1 + beta* NormGrad.^2);
imshow(g,[]);

Ответы:


1

Канонические сглаживающие фильтры с сохранением границ должны быть вполне подходящими для вашего конкретного приложения. Они одновременно удаляют шум (распределенный по Гауссу, я должен добавить ...), сохраняя при этом края как можно лучше. Классические примеры включают двусторонний фильтр, Фильтр управляемых изображений, автор Kaiming He, фильтрация преобразования домена Гастала и Оливейры (которую я успешно использовал в прошлом) и даже анизотропная диффузия.

Чтобы быстро попробовать что-то, управляемый фильтр изображений теперь включен в качестве официальной функции, которая является частью набора инструментов обработки изображений, начиная с MATLAB R2014a, через imguidedfilter. Если у вас нет MATLAB R2014a или более поздней версии, вы можете загрузить необработанный исходный код MATLAB по этой ссылке здесь: http://kaiminghe.com/eccv10/guided-filter-code-v1.rar, но вы можете получить его на основном веб-сайте, на который я ссылался выше.

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

I = im2double(imread('http://i.stack.imgur.com/ACRE8.png')); %// Load in sample image that was corrupted by noise
r = 2; %// Parameters for the Guided image filter
eps = 0.1^2;

%// Filter the image, using itself as a guide
q = guidedfilter(I, I, r, eps);

%// Show the original image and the filtered result
figure;
subplot(1,2,1); imshow(I, []);
subplot(1,2,2); imshow(q, []);

Мы показываем исходное изображение, затем результат управляемого фильтра справа:

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

Получив это, попробуйте использовать любой канонический детектор краев для обнаружения краев. Тот, который вы используете, предварительно размывает изображение перед поиском краев, но он использует стандартное сглаживание и пропускает некоторые края. Поскольку использование фильтра управляемого изображения приводит нас к точке, в которой края сохраняются, а общее изображение практически лишено шумов, мы можем попробовать что-то простое, например фильтр Собеля, на результате сглаживания краев:

[Gmag,~] = imgradient(q, 'sobel');
imshow(max(Gmag(:)) - Gmag,[]);

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

... и мы получаем это:

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

Как видите, даже при наличии шума нам все же удалось сгладить множество краев.

13.08.2015
  • Спасибо, rayryeng. Я смотрю на свой результат и на ваш результат и вижу, что ваш результат намного лучше моего результата. Однако нам нужно доказать, что ваш метод может обеспечить сохранение края. Знаете ли вы какое-либо количественное измерение, показывающее, что ваш метод лучше моего? 13.08.2015
  • Существует множество количественных показателей, которые вы можете использовать, чтобы определить, лучше ли один результат, чем другой, но для этого требуется, чтобы у вас была ссылка на исходное изображение края. Если у вас этого нет, то вы можете только посмотреть на это качественно. Предположим, у вас есть референс, вы можете использовать PSNR, MSE или что-то подобное. При этом без ссылки для сравнения вы не можете сравнивать мой метод и ваш. 13.08.2015
  • @Benoit_11 - Мерси :) 13.08.2015
  • Я сделал опорное ребро из сегментированного изображения (4 метки) с помощью лапласиана. Вы можете скачать на dropbox.com/s/4feqixaiby3zgky/Edges_invert.mat? dl=0 или если вы хотите создать его самостоятельно. Вы можете загрузить сегментированное изображение по адресу dropbox.com/s/qfovofhdldiwijn/I_Ref. .mat?dl=0. Надеюсь, что ваш метод добился хорошей производительности 13.08.2015
  • @user3051460 user3051460 - Я проверю качество сегодня вечером. Не могу сделать это в настоящее время. 13.08.2015
  • В порядке. До скорой встречи. Спасибо 13.08.2015
  • Очень хорошо!! это хороший ответ! Как насчет шумоподавления Total Variation? 14.08.2015
  • @AnderBiguri, честно говоря, я не пробовал телевидение, потому что не смог найти готовых реализаций для тестирования. Управляемая фильтрация была доступна для быстрого тестирования. Будет ли здесь лучше работать телевидение? 14.08.2015
  • @rayryeng на самом деле вы правы, встроенного телевизора в Matlab нет. Я думаю, что телевидение будет большим здесь. Я мог бы попробовать что-нибудь, и если это сработает, я опубликую дополнительный ответ 14.08.2015
  • @ user3051460 - Я думаю, будет лучше, если вы сами сравните то, что написал я, и то, что написал Андер, и выясните для себя, какой метод лучше. Ты лучший, кто может это определить, и если мы сравним тебя, ты ничего не узнаешь. Простым тестом может быть пороговое значение градиентных изображений, чтобы они были краевыми пикселями, а затем выполнить SSD между обоими изображениями. PSNR также является хорошим подходом, и вы можете посмотреть здесь, как его вычислить: stackoverflow.com/questions/16264141/ 14.08.2015
  • @rayryeng: я сравнил. Это полностью превосходит мой метод. В настоящее время я хочу сделать формулу ребра Собеля (в математике), которая выглядит как формула Гаусса g=1/(1+β∇ (IG)^2). Не могли бы вы предложить мне какую-нибудь ссылку или формулу для приведенной выше реализации обнаружения края Собеля? Я попытался описать ваш код max(Gmag(:)) - Gmag как g=1/(1+βGmag), но они разные. Диапазон 'max(Gmag(:)) - Gmag' будет от 0 до max(Gmag(:)) , а диапазон g=1/(1+βGmag) от 0 до 1. Но когда Я использую max(Gmag(:)) - Gmag, я видел, что это дает более точный результат, чем g=1/(1+βGmag) 29.08.2015
  • ИМХО это отдельный вопрос. Пожалуйста, рассмотрите возможность задать еще один вопрос. 29.08.2015

  • 2

    Просто для того, чтобы добавить еще один метод к довольно полному и интересному ответу @rayryeng, я покажу вам, как устранить шум с помощью известного алгоритма полной вариации Сплит-Брегмана.

    Этот алгоритм заставляет изображение иметь «меньше возможное количество уровней оттенков серого»*. Таким образом, это уменьшит шум изображения (поскольку похожие уровни гэри будут преобразованы в одинаковые), но сохранит края.

    В Matlab не реализовано ТВ, но вы можете проверить эта реализация.

    Пример использования (надеюсь, код говорит сам за себя)

    N = 256; n = N^2;
    
    % Read image;
    g=double(imread('http://i.stack.imgur.com/ACRE8.png'));
    %fill it with zeroes to make a NxN image
    sz=size(g);
    img=zeros(N);
    img(1:size(g,1),1:size(g,2))=g;
    g=img;
    
    % the higher this parameter is, the stronger the denoising
    mu = 6;
    
    % denoise 
    g_denoise_atv = SB_ATV(g,mu);
    %prepare output
    denoised=reshape(g_denoise_atv,N,N);
    denoised=denoised(1:sz(1),1:sz(2));
    
    % edges
    [Gmag,~] = imgradient(denoised, 'sobel');
    
    subplot(131); imshow(g(1:sz(1),1:sz(2)),[]);title('Original');
    subplot(132); imshow(denoised,[]);title('Denoised');
    subplot(133); imshow(max(Gmag(:)) - Gmag,[]);title('Edges');
    

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

    Если вы играете с параметром mu, вы можете получить изображения с очень низким шумом (но данные изображения будут потеряны) или с очень небольшим шумом (но данные о качестве изображения будут более сохранены);

    mu=40
    

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

    mu=1;
    

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

    * Это нематематическое объяснение метода. Для пуристов проверьте методы регуляризации L1.

    14.08.2015
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..