сегментный объект (лист), который находится на белой бумаге с использованием обработки изображения

Я хочу получить только лист с изображения. Фон - обычная белая бумага (А4) с небольшой тенью.

Я применяю какой-то метод (элемент структуры, обнаружение краев с помощью фильтра), но не могу найти общий способ, которым можно применить все изображение.

это примеры. ex1

ex2

Есть ли лучшие методы для этой проблемы??

благодарю вас

другой пример. ex3

и в результате я получил ex3_result

Используя

hsv_I = rgb2hsv(I);
Is = hsv_I(:,:,2);
Is_d = imdilate(Is,strel('diamond',4));
Is_e = imerode(Is,strel('diamond',2));
Is_de = imerode(Is_d,strel('disk',2));
Is_def = imfill(Is_de,'holes');
Is_defe = imerode(Is_def,strel('disk',5));

Тогда Is_defe — это маска для сегментации введите здесь описание изображения

Но метод, который я сделал, очень специфичен. Я не могу использовать это в целом.


person BOSS    schedule 07.02.2014    source источник
comment
Ваш код вы пробовали?   -  person Marcin    schedule 07.02.2014
comment
сегментация водосбора. Учитывая, что могут быть немного сложные случаи, чем этот. Для этого подойдет даже простое цветовое пороговое значение.   -  person Autonomous    schedule 07.02.2014
comment
во-первых, я использую фильтр, такой как собель, лапласиан, чтобы применить его, но слишком много шумов, использующих пространство RGB, пространство HSV.   -  person BOSS    schedule 07.02.2014
comment
другой метод, который я использую, - это элемент структуры, который применяется к пространству RGB, HSV. результат отличный, но его можно использовать в некоторых случаях, не общих.   -  person BOSS    schedule 07.02.2014
comment
parag - не могли бы вы дать мне соответствующий ресурс? или я могу использовать сегментацию водосбора для поиска?   -  person BOSS    schedule 07.02.2014
comment
@Marcin, я уже добавил свой код.   -  person BOSS    schedule 07.02.2014
comment
Смотрите мой отредактированный ответ, надеюсь, это поможет   -  person Cape Code    schedule 07.02.2014
comment
Можете ли вы предположить, что лист будет находиться в центре изображения и будут какие-то поля? Это происходит в ваших примерах изображений, будет ли это так для каждого изображения?   -  person Imanol Luengo    schedule 09.07.2014


Ответы (1)


Если у вас есть Image Processing Toolbox, вы можете сделать следующее:

Приведенный ниже код сначала оценивает порог с помощью функции graythresh, изображение и заполняет пробелы с помощью функции imfill. Предположим, что I — это ячейка, содержащая ваши изображения RGB:

for k=1:length(I)
    t=graythresh(rgb2gray(I{k}));
    BW{k}=imfill(~im2bw(I{k}, t), 'holes');
    subplot(length(I),1,k), imshow(BW{k});
end

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

person Cape Code    schedule 07.02.2014
comment
Я содержит 3 картинки, а k - это номер картинки, не так ли? - person BOSS; 07.02.2014
comment
спасибо за вашу идею, но я думаю, что ваш результат включает тень, которая мне не нужна. - person BOSS; 07.02.2014
comment
@BOSS да, I в этом случае - это ячейка с 3 изображениями, следовательно, k зацикливается от 1 до 3. Этот цикл не является для вас строго необходимым, он просто автоматизирует процесс. - person Cape Code; 07.02.2014
comment
@BOSS, чем я бы предложил использовать только зеленый канал. Замените первую строку цикла на: t=graythresh(I{k}(:,:,2)); - person Cape Code; 07.02.2014