Функция Matlab strel (строка) для python

Я хочу использовать функцию matlab strel("line") в python

Я нашел библиотеку Python, например scikit-learn/opencv/mahotas.

но я не могу найти его.

наконец, я нашел аналогичную функцию в pymorph 'seline', но она отличается от функции matlab strel.


в частности, я хочу использовать (или реализовать) strel("line") и повернуть его.

как strel("строка", длина, степень)


Matlab example
a = strel("line",5,0)
b = strel("line",5,30)
c = strel("line",5,45)
output is

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

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

как это.

Любой, кто знает алгоритм функции strel («линия», длина, степень) Matlab или библиотеки Python, равной strel («строка», длина, степень), сообщите мне. благодарю вас.


person Jeong Hweon Woo    schedule 26.07.2018    source источник


Ответы (1)


Для такого рода вопросов вы всегда можете проверить код, предоставленный проектом Octave.

Используя эту ссылку вы можете увидеть, как функция strel реализована в Octave.

Следующий код полностью извлечен из функции strel класса Octave и соответствует случаю strel('line'):

## Parameters (degrees and linelenght)
degrees = 30
linelen = 5


## Line length are always odd, to center strel at the middle of the line.
## We look it as a diameter of a circle with given slope
deg90 = mod (degrees, 90);
if (deg90 > 45)
   alpha = pi * (90 - deg90) / 180;
else
   alpha = pi * deg90 / 180;
endif
   ray = (linelen - 1)/2;

## We are interested only in the discrete rectangle which contains the diameter
## However we focus our attention to the bottom left quarter of the circle,
## because of the central symmetry.
c = round (ray * cos (alpha)) + 1;
r = round (ray * sin (alpha)) + 1;

## Line rasterization
line = false (r, c);
m = tan (alpha);
x = [1:c];
y = r - fix (m .* (x - 0.5));
indexes = sub2ind ([r c], y, x);
line(indexes) = true;

## We view the result as 9 blocks.
# Preparing blocks
linestrip = line(1, 1:c - 1);
linerest = line(2:r, 1:c - 1);
z = false (r - 1, c);

# Assemblying blocks
SE.nhood =  vertcat (
    horzcat (z, linerest(end:-1:1,end:-1:1)),
    horzcat (linestrip, true, linestrip(end:-1:1,end:-1:1)),
    horzcat (linerest, z(end:-1:1,end:-1:1))
    );

# Rotate/transpose/flip?
sect = fix (mod (degrees, 180) / 45);
switch (sect)
    case 1, SE.nhood = transpose (SE.nhood);
    case 2, SE.nhood = rot90 (SE.nhood, 1);
    case 3, SE.nhood = fliplr (SE.nhood);
    otherwise, # do nothing
endswitch

SE
person obchardon    schedule 26.07.2018