Реализация гребенчатого обнаружения

Учитывая, что вы уже используете Circe, вы можете упростить, добавив эту библиотеку в свой проект:

"de.heikoseeberger" %% "akka-http-circe" % "<latest-version>"

и импортировав эти два класса, чтобы упорядочить ваш List[PhoneNumber] в HttpResponse, содержащий JSON:

import de.heikoseeberger.akkahttpcirce.ErrorAccumulatingCirceSupport._
import io.circe.generic.auto._

def streamRoute: Route = pathEndOrSingleSlash {
  complete(new LocalFileParser(config).importFromFiles)
}
7
задан Jesse Beder 26 February 2009 в 02:21
поделиться

2 ответа

Возможно, необходимо думать с точки зрения чистки строки, которую Вы уже имеете, а не как будто осторожное граничное обнаружение. Такое чувство, что необходимо смочь сделать что-то с морфологией изображения, в особенности я думаю о skeletonize, и окончательные разрушенные точки вводят операции. Используемый соответственно они должны удалить из Вашего изображения любые функции, которые не являются 'строками' - я полагаю, что они реализованы в библиотеке OpenCV Intel.

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

5
ответ дан 7 December 2019 в 07:50
поделиться

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

http://en.wikipedia.org/wiki/Hough_transform

Необходимо смочь получить фактическое уравнение для строки от этого, таким образом, можно сделать его столь тонким или толстым, как Вам нравится. Единственная хитрая часть выясняет где концы строки.

Вот код, который я написал для hough, преобразовывают несколько лет назад, записанный в MATLAB. Я не уверен, как хорошо это больше работает, но это должно дать Вам общее представление. Это найдет все строки (не сегменты) в изображении

im = imread('cube.tif');
[bin1,bin2,bin3] = canny(im);

%% define constants
binary = bin1;
distStep = 10; % in pixels
angStep = 6; % in degrees
thresh = 50;

%% vote
maxDist = sqrt((size(binary,1))^2+(size(binary,2))^2);
angLoop = 0:angStep*pi/180:pi;
origin = size(binary)/2;
accum = zeros(ceil(maxDist/distStep)+1,ceil(360/angStep)+1);

for y=1:size(binary,2)
    for x=1:size(binary,1)
    if binary(x,y)
        for t = angLoop
        dx = x-origin(1);
        dy = y-origin(2);
        r = x*cos(t)+y*sin(t);
        if r < 0
            r = -r;
            t = t + pi;
        end
        ri = round(r/distStep)+1;
        ti = round(t*180/pi/angStep)+1;
        accum(ri,ti) = accum(ri,ti)+1;
        end
    end
    end
end
imagesc(accum);

%% find local maxima in accumulator
accumThresh = accum - thresh;
accumThresh(logical(accumThresh<0)) = 0;
accumMax = imregionalmax(accumThresh);
imagesc(accumMax);

%% calculate radius & angle of lines
dist = [];
ang = [];
for t=1:size(accumMax,2)
    for r=1:size(accumMax,1)
    if accumMax(r,t)
        ang = [ang;(t-1)*angStep/180*pi];
        dist = [dist;(r-1)*distStep];
    end
    end
end
scatter(ang,dist);
2
ответ дан 7 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: