Идентификация всех сегментов ко-линейных линий (в matlab)

Я разместил связанный, но не тот же вопрос здесь https://stackoverflow.com/questions/8279698/measuring-length-of-dna-fibers-from-an-image-of-single-molecules

Фон: У меня есть много изображений, которые выглядят следующим образом: enter image description here

Я хотел бы определить все отрезки линий, которые являются ко-линейными, а затем измерить длину этих отрезков. На изображении выше есть 3 пары отрезков, которые лежат на воображаемой прямой с отрицательным наклоном. Самый длинный отрезок не имеет пары, поэтому он не будет рассматриваться, т.е. должно быть как минимум 2 косоугольных отрезка.

Я получаю следующее: enter image description here

I  = imread('http://dl.dropbox.com/u/18072545/c_39_green.tif'); 
BW = edge(I,'canny');
[H,T,R] = hough(BW);
NUMPEAKS=15;
PEAKTHRESHOLD= 80; 
SUPPRESSNHBR=[40 40];
P  = houghpeaks(H,NUMPEAKS,'threshold',PEAKTHRESHOLD,'NHoodSize',SUPPRESSNHBR); 
MINLENGTH_OF_SEGMENT=50;
GAPLENGTH_TO_MERGE=30;
lines = houghlines(BW,T,R,P,'FillGap',GAPLENGTH_TO_MERGE,'MinLength',MINLENGTH_OF_SEGMENT);
max_len = 0;
figure, imshow(I), hold on
for k = 1:length(lines)
  xy = [lines(k).point1; lines(k).point2];
  plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
  plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
  plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end

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

Может ли кто-нибудь помочь мне, пожалуйста. 1. Предотвратить выявление перекрывающихся сегментов. 2. Определить все линии, которые являются ко-линейными

Большое спасибо!

8
задан Community 23 May 2017 в 12:19
поделиться