matlab 转 python函数_Matlab函数strel(“ line”)转换为python

我想在python中使用matlab函数strel(“ line”)

我发现像scikit-learn / opencv / mahotas这样的python库

但我找不到

最后,我在pymorph’seline’中发现了类似的功能,但与matlab strel函数不同.

具体来说,我想使用(或实现)strel(“ line”)并旋转它.

像strel(“ line”,length,degree)

Matlab的例子

a = strel("line",5,0)

b = strel("line",5,30)

c = strel("line",5,45)

输出是

像这样.

如果您知道matlab的strel(“ line”,length,degree)函数或python库等于strel(“ line”,length,degree)的算法,请告诉我.谢谢.

解决方法:

对于此类问题,您始终可以检查项目Octave提供的代码.

使用this link,您可以看到功能strel是如何在Octave中实现的.

以下代码完全从Octave的strel函数中提取,并与大小写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

标签:image-processing,image-morphology,matlab,python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值