我的输入图片是
输出图像是
预期的输出是这样的
可以看到有些类似椭圆的结构已与矩形合并。此外,我无法分离每个标签来获得椭圆。使用的算法是分水岭
clear; close all;
I = imread('Sub.png');
I = rgb2gray(I);
figure; imshow(I)
I2 = imtophat(I, strel('square', 45));
figure; imshow(I2)
% Alpha=.047;
% h = fspecial('motion', 10, 5);
% w=gausswin(I2,Alpha) % you'll have to play with N and alpha
% I2 = imfilter(I2,h,'same','symmetric'); % something like these options
level = .047;
BW = im2bw(I2,level);
D = -bwdist(~BW,'chessboard');
D(~BW) = -Inf;
L = watershed(D);
imshow(label2rgb(L,'jet','w'))
最终开放代码:
ImageSource=imread('cameraman.tif');
ImTmp=ImageSource
ImResidue = zeros(size(ImageSource));
ImIndicator= zeros(size(ImageSource));
ImValues= zeros(size(ImageSource));
For size= 1 : N
se = strel('square',N);
ImOp = imopen(ImageSource,se);
ImDiff=imabsdiff(ImOp,ImTmp)
if ImResidue < ImDiff then
ImResidue = ImDiff
ImIndicator = size
ImValues = ImOp
end
ImTmp=ImOp
end
如果您想要准确的内容,则必须使用带有标记的分水岭,但这将变得更加棘手。默认情况下,基本分水岭在路段上,因为它使用每个局部最小值作为标记。
因此,您必须对图像进行一些预处理,以增加要分割的对象之间的间隔,然后使用标记来引导分水岭。
[根据您的编辑编辑]如果您只想要椎骨之间的小结构,那么我建议进行小的侵蚀,以增加它们之间的间隙,然后进行最终开口。当椎骨需要较大的椎骨时,所需的结构将以较小的半径消失。
不要忘记在渐变图像上使用标记。
[编辑2,初步结果]我对您的问题感到好奇,因此尝试了一下。我没有去到椎骨之间的小区域(要分割的区域),而是尝试先分割椎骨(想要在它们之间的区域)。
这是我所做的:
您想要分割的图案在椎骨之间,所以我想这个结果会缩小很多感兴趣的区域。
对你起作用吗?
我无法共享代码,但是我想您应该在MatLab中找到所有内容。
您可以通过检测矩形来改善此结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句