2016-12-16 5 views
4

Я пытаюсь удалить границу с моего изображения в Matlab. enter image description here Я попытался этоГраничное удаление изображений в Matlab

clc,clear,clf 

Im=im2double(imread('Im.png')); 
imshow(Im);title('Original Image') 
pause(.5) 
imshow(edge(Im));title('after Sobel') 
pause(.5) 
imshow(Im-edge(Im));title('Im-edge(Im)') 

и результат

enter image description here

но есть две проблемы ясно:

  1. Выход edge по умолчанию Sobel содержат некоторая внутренняя часть формы.
  2. Вычесть binary изображение из gray scale одного! (Выход edge является binary)

    любая помощь будет оценена.

Download оригинальное изображение.

+0

Что вы подразумеваете под "удалить границу"? Вы имеете в виду удалить белый периметр объекта? Ваш желаемый результат в верхней части вашего сообщения включает краевые пиксели, которые являются внутренними для объекта, поэтому то, что вы описываете, и ваши желаемые результаты не соответствуют друг другу. – rayryeng

+0

Да, просто хочу удалить белую полосу вокруг фигуры, желаемое изображение было показано в двоичном режиме. – asys

+0

Основная цель - определить шов на фотографии. эта фотография получается после сегментации фона по линиям hough – asys

ответ

1

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

Для воспроизводимости, я загрузил изображение в Stack Imgur так, что мы не должны полагаться на сторонний сайт, чтобы скачать изображение:

enter image description here

Это «немного» для сокращаться и расти, вам придется поиграть. Я выбрал 5 пикселей, поскольку это, похоже, работает. Чтобы сделать сокращение и рост, используйте эрозию и дилатацию соответственно с imerode и imdilate соответственно, и я использовал структурирующий элемент квадрата размером 5 × 5 пикселей.

% Read from Stack Imgur directly 
im = imread('https://i.stack.imgur.com/UJcKA.png'); 

% Perform Sobel Edge detection 
sim = edge(im, 'sobel'); 

% Find the mask of the object 
mask = im > 5; 

% Shrink the object 
se = strel('square', 5); 
mask_s = imerode(mask, se); 

% Remove the inner boundary of the object 
mask(mask_s) = false; 

% Slightly enlarge now to ensure outer boundary is removed 
mask = imdilate(mask, se); 

% Create new image by removing the boundaries of the 
% edge image 
sim(mask) = false; 

% Show the result 
figure; imshow(sim); 

Теперь мы получаем этот образ:

enter image description here

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

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