Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 去除精子尾部的污渍_Image_Matlab_Image Processing_Shapes_Smoothing - Fatal编程技术网

Image 去除精子尾部的污渍

Image 去除精子尾部的污渍,image,matlab,image-processing,shapes,smoothing,Image,Matlab,Image Processing,Shapes,Smoothing,我试图得到精子细胞的边界,它的边缘应该是光滑的。然而,尾巴上有一个小斑点。我想知道是否有什么方法可以去除它们,得到一个平滑的精子边界?附件是我执行的图和一些代码(MATLAB) I = imread('asd3.png'); gray = rgb2gray(I); I = adapthisteq(gray); [counts,~] = imhist(I,6); T = otsuthresh(counts); BW = imbinarize(I,T); BW2 = bwareaopen(~BW,3

我试图得到精子细胞的边界,它的边缘应该是光滑的。然而,尾巴上有一个小斑点。我想知道是否有什么方法可以去除它们,得到一个平滑的精子边界?附件是我执行的图和一些代码(MATLAB)

I = imread('asd3.png');
gray = rgb2gray(I);
I = adapthisteq(gray);
[counts,~] = imhist(I,6);
T = otsuthresh(counts);
BW = imbinarize(I,T);
BW2 = bwareaopen(~BW,300);
imshow(BW)
figure
subplot(221),imshow(original)
subplot(222),imshow(gray)
subplot(223),imshow(BW)
subplot(224),imshow(BW2)
我将得到如下数字:

我能把这个数字提高到以下吗


主要问题是噪音的质量相当大。要删除此体量,我使用了骨架图像:

BW = bwmorph(BW,'skel',inf);
这将使你的精子细胞成为一个树状结构,主干现在是这棵树中最长的连接路径。为了找到这一点,我使用Brett Scholeson的函数,您可以找到(或者您可以自己创建)。我发现,为了使最长线的检测更加健壮,最好先稍微加厚所有内容。因此,我们以

I = imread('sperm.png');
BW1 = ~imbinarize(rgb2gray(I)); %Make the spermcell "true"

%Find backbone
BW2 = bwmorph(BW1,'thicken',5);
[BW3,~] = longestConstrainedPath(BW2,'thinOpt','Skel');
现在我们只需要重建这个主干周围的精子细胞,用形态学方法很容易找到头部

head = imopen(BW1,strel('disk',10,0));
而尾巴是通过扩张脊骨发现的

%Thicken backbone
stats = regionprops(BW1-head,'Area');
area = stats.Area;
len = sum(BW3(:));
stem = imdilate(BW3,strel('disk',floor(0.5*area/(2*len)),0));
其中,扩张量为原始尾部的厚度,可近似为尾部面积除以长度。虽然由于人工制品的原因,这太厚了,但我估计一半的区域是尾巴,另一半是人工制品

因为我们有头部和尾部,所以可以通过将它们相加并反转来找到整个单元

sperm = ~(stem+head);

注意:假设您希望获得更高的准确性

1) 最长路径不是完全正确的路径,因为它选择了错误的端点,这可能通过移除杂散来改善


2) 我使用了尽可能简单的重建方法,假设尾巴的宽度相等。这可能是改进我做更多的测量原始图片

主要问题是噪音的质量相当大。要删除此体量,我使用了骨架图像:

BW = bwmorph(BW,'skel',inf);
这将使你的精子细胞成为一个树状结构,主干现在是这棵树中最长的连接路径。为了找到这一点,我使用Brett Scholeson的函数,您可以找到(或者您可以自己创建)。我发现,为了使最长线的检测更加健壮,最好先稍微加厚所有内容。因此,我们以

I = imread('sperm.png');
BW1 = ~imbinarize(rgb2gray(I)); %Make the spermcell "true"

%Find backbone
BW2 = bwmorph(BW1,'thicken',5);
[BW3,~] = longestConstrainedPath(BW2,'thinOpt','Skel');
现在我们只需要重建这个主干周围的精子细胞,用形态学方法很容易找到头部

head = imopen(BW1,strel('disk',10,0));
而尾巴是通过扩张脊骨发现的

%Thicken backbone
stats = regionprops(BW1-head,'Area');
area = stats.Area;
len = sum(BW3(:));
stem = imdilate(BW3,strel('disk',floor(0.5*area/(2*len)),0));
其中,扩张量为原始尾部的厚度,可近似为尾部面积除以长度。虽然由于人工制品的原因,这太厚了,但我估计一半的区域是尾巴,另一半是人工制品

因为我们有头部和尾部,所以可以通过将它们相加并反转来找到整个单元

sperm = ~(stem+head);

注意:假设您希望获得更高的准确性

1) 最长路径不是完全正确的路径,因为它选择了错误的端点,这可能通过移除杂散来改善


2) 我使用了尽可能简单的重建方法,假设尾巴的宽度相等。这可能是改进我做更多的测量原始图片

谢谢大家!!它几乎完美,我想我需要添加最后一步平滑茎,你有任何建议。我还将尝试处理一些聚集的图片,看看是否也会起作用。一旦找到最长路径,
BW3
您可以询问点,然后排序,然后对该点集应用一些函数平滑。谢谢!它几乎完美,我想我需要添加最后一步平滑茎,你有任何建议。我还将尝试处理一些聚集的图片,看看是否也会起作用。一旦找到最长路径,
BW3
您可以询问点,然后排序,然后对该点集应用一些函数平滑。