gpt4 book ai didi

matlab:找到图片中对象的外边缘

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:22 24 4
gpt4 key购买 nike

我有一张包含血迹的图片。我想要做的是检测这些细胞的边缘。 blood smear

我首先将此彩色图像转换为灰度图像,然后填充这些单元格中的孔洞。我在 matlab 中使用 edge() 函数来检测边缘。因为你可以观察到一些细胞的内部更亮,所以在一个细胞内部检测到边缘。结果如下图:edge detection result

那么有什么方法可以只检测到这些细胞的外边缘吗?

我的代码如下所示:

I = imread('film02_pattern.jpg'); 
t1=graythresh(I);
k1=im2bw(I,t1);
k1=~k1;
se = strel('disk',1);
k1=imfill(k1,'holes');
imshow(k1);
k1=~k1;
bw = edge(k1,'canny',[],sqrt(2));
figure,imshow(bw);

最佳答案

要处理与图像边缘相交的轮廓,可以使用 bwconncomp将背景与无法填充的轮廓分开。然后,您只能通过 bwperim 获取外周长,而不是 edge ,但这只是一个变体。

I = imread('asEW3.jpg');
t1=graythresh(I);
k1=im2bw(I,t1);
k1=~k1;
se = strel('disk',1);
k0=imfill(~k1,'holes'); % new
cc = bwconncomp(k0); % new
k0(cc.PixelIdxList{1})=0; % new
k1 = imfill(k1,'holes');
cellMask = k1 | k0; % new
cellContours = bwperim(cellMask); % new
cellContours2 = edge(cellMask,'canny',[],sqrt(2)); % new
k1=~k1;
bw = edge(k1,'canny',[],sqrt(2));
figure,imshow(bw); title('original')
figure,imshow(cellContours); title('new, bwperim()')
figure,imshow(cellContours2); title('new, edge()')

使用连接组件似乎有点矫枉过正,但似乎没有更简单的方法来区分背景和到达图像边缘的单元格中心,至少在 imfill 无法填充这些轮廓。

关于matlab:找到图片中对象的外边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com