2016-09-13 9 views
0

Я работаю над исследованием о плавании рыб, используя анализ видео, затем мне нужно быть осторожным с изображениями (полученными из видеокадров) с акцентом в хвосте.Гладкая и подходящая кромка двоичных изображений

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

Для obten этих бинарных изображений я использую 2 метод:

1) Преобразование изображения в сером, инвертировать цвета, позже м.т. и, наконец, в двоичный с Treshold, которые дают мне образа, как это, почти ничего шума. Изображения иногда Потеря немного площади и не очень точно с хвостом (теперь мне нужно больше acurracy для детерминированной амплитуда хвостовых ходов) image 1

2) Я использую этот код для нарезанных границ, что увеличьте порог, это даст мне хорошее изображение края, но я не знаю, как соединить эти точки и сгладить изображение, или установить бинарные изображения, приложение matlab 2012Rb не дает мне хороший график, и я не знаю, t иметь доступ к наборам инструментов Matlab.

s4 = imread('arecorte.bmp'); 
A=[90 90 1110 550] 
s5=imcrop(s4,A) 
E = edge(s5,'canny',0.59); 

image2

Моего вопрос в том, что

как я может поместиться бинарное изображением или совместных точек и гладким, не тревожить хвост?

Или Как я могу использовать кромку изображения 2 для увеличения изображения изображения 1?

Я загружу изображение в комментариях, которые дают мне идею метода 2), потому что я не могу размещать больше ссылок, пожалуйста, помните, что я работаю с итерациями, и я не могу работать кадр за кадром ,

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

+0

http://i.stack.imgur.com/6hmSe.jpg – JVidal

+0

Не используйте для этого детектор canny edge, его алгоритм для изображений в оттенках серого, а не для черно-белых изображений. Используйте 'bwperim' http://uk.mathworks.com/help/images/ref/bwperim.html –

+0

Если это не включает хвост, сначала разведите и размывайте изображение одним и тем же ядром. https://uk.mathworks.com/help/images/morphological-dilation-and-erosion.html –

ответ

0

Я думаю, вы должны использовать связную компоненту маркировочный и отбросить небольшие этикетки и чем извлечь метки краевых получить пиксели каждой части

код:

clear all 

% Read image 
I = imread('fish.jpg'); 

% You don't need to do it you haef allready a bw image 
Ibw = rgb2gray(I); 
Ibw(Ibw < 100) = 0; 

% Find size of image 
[row,col] = size(Ibw); 

% Find connceted components 
CC = bwconncomp(Ibw,8); 

% Find area of the compoennts 
stats = regionprops(CC,'Area','PixelIdxList'); 
areas = [stats.Area]; 

% Sort the areas 
[val,index] = sort(areas,'descend'); 

% Take the two largest comonents ids and create filterd image 
IbwFilterd = zeros(row,col); 
IbwFilterd(stats(index(1,1)).PixelIdxList) = 1; 
IbwFilterd(stats(index(1,2)).PixelIdxList) = 1; 
imshow(IbwFilterd); 

% Find the pixels of the border of the main component and tail 
boundries = bwboundaries(IbwFilterd); 

yCorrdainteOfMainFishBody = boundries{1}(:,1); 
xCorrdainteOfMainFishBody = boundries{1}(:,2); 
linearCorrdMainFishBody = sub2ind([row,col],yCorrdainteOfMainFishBody,xCorrdainteOfMainFishBody); 

yCorrdainteOfTailFishBody = boundries{2}(:,1); 
xCorrdainteOfTailFishBody = boundries{2}(:,2); 
linearCorrdTailFishBody = sub2ind([row,col],yCorrdainteOfTailFishBody,xCorrdainteOfTailFishBody); 

% For visoulaztion put color for the boundries 
IFinal = zeros(row,col,3); 
IFinalChannel = zeros(row,col); 

IFinal(:,:,1) = IFinalChannel; 

IFinalChannel(linearCorrdMainFishBody) = 255; 
IFinal(:,:,2) = IFinalChannel; 

IFinalChannel = zeros(row,col); 
IFinalChannel(linearCorrdTailFishBody) = 125; 
IFinal(:,:,3) = IFinalChannel; 
imshow(IFinal); 

Финального изображение: enter image description here

+0

Спасибо вам за ответ! Когда я запустил, matlab покажет мне сообщение «Попытка доступа к индексу (1,2); индекс за пределами границ, потому что numel (index) = 1». и я заметил, что CC.NumObjects = 1 тем, что я меняю строку8 с «<" to ">», и код работает без проблем Я стараюсь использовать множество изображений и сравнивать с методом _bwbwlabel_ image, а положение хвоста очень точно !; но у меня проблема, код не работает очень хорошо для всех ситуаций, изображения, которые выглядят хорошо «в 1 области» (почти все), подобные этому (http://imgur.com/a/rNaVe), имеют плохое представление (http://imgur.com/a/0DZRg) – JVidal

+0

Теперь мне нужно заполнить изображение (с помощью imfill (_ 'holes')) для использования математических операций моего кода, но (все работает в соответствии с «областью» 'и' orientation '), Как я могу исправить код, который отлично работает со всеми ситуациями? проверка расстояния? почти все другие шумы появляются на другой стороне изображения, это худший случай для этого кода, в тот момент, когда я могу решить эту проблему и буду работать с 1000 изображениями и поделиться результатом: D я очень благодарен вам , – JVidal

+0

Что касается представления, вы посмотрели с увеличением масштаба? Причина, по которой далеко не так выглядит, вероятно, из-за разрешения фигуры, но если вы увеличите масштаб, я думаю, вы увидите, что это нормально –

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

  • Нет связанных вопросов^_^