我正在将一个matlab图像处理脚本移植到python/skimage中,但是没有找到matlab的bwmorph函数,特别是skimage中的'spur'
操作。matlab文档对spur
操作这样说:
Removes spur pixels. For example:
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 becomes 0 0 0 0
0 1 0 0 0 1 0 0
1 1 0 0 1 1 0 0
我用python实现了一个版本,可以很好地处理上述情况:
^{pr2}$上面的方法是删除只有一个相邻像素的任何像素。在
不过,我注意到上述实现的行为与matlab的spur
操作不同。以matlab中的这个例子为例:
0 0 0 0 0
0 0 1 0 0
0 1 1 1 1
0 0 1 0 0
0 0 0 0 0
becomes, via bwmorph(t,'spur',1):
0 0 0 0 0
0 0 0 0 0
0 0 1 1 1
0 0 0 0 0
0 0 0 0 0
spur操作比查看8邻居计数要复杂一些。我不清楚如何扩展我的实现以满足这种情况,而不使其过于激进(即删除有效像素)。在
matlab的spur
的底层逻辑是什么?或者有一个python实现可以使用吗?在
更新: 我发现Octave使用LUT实现了spur:
case('spur')
## lut=makelut(inline("xor(x(2,2),(sum((x&[0,1,0;1,0,1;0,1,0])(:))==0)&&(sum((x&[1,0,1;0,0,0;1,0,1])(:))==1)&&x(2,2))","x"),3);
## which is the same as
lut=repmat([zeros(16,1);ones(16,1)],16,1); ## identity
lut([18,21,81,273])=0; ## 4 qualifying patterns
lut=logical(lut);
cmd="BW2=applylut(BW, lut);";
(通过https://searchcode.com/codesearch/view/9585333/) 假设这是正确的,我只需要能够在python中创建这个LUT并应用它。。。在
我最终实现了我自己的}的其他操作。对于未来有同样需求的互联网旅行者来说,这里有一个我最终使用的便捷要点:
spur
版本和{https://gist.github.com/bmabey/4dd36d9938b83742a88b6f68ac1901a6
相关问题 更多 >
编程相关推荐