TJUi2i实验室题目——红细胞边缘检测

红细胞边缘检测

要求提取下列图片的边缘:
原始图片

step1灰度拉伸。

灰度拉伸属于线性点运算的一种。灰度拉伸也称对比度拉伸,是一种简单的线性点运算。我的理解是可以增加图片的对比度。暗的更暗,亮的更亮。这一步相当于预处理,有利于下一步二值化处理。
在这里插入图片描述

step2二值化处理

通过在箭头处的红细胞边界上选点,可以确定图像边缘部分的灰度大小范围。例如箭头处一点的灰度大小为 126。经过反复参数调整,确定选择[125,50]范围内的像素点置为白色 255,其余为黑色 0。初步得到边缘。这个参数范围能够使后期细胞膜不出现不连续。
在这里插入图片描述

step3进行形态学运算

此时边缘具有一定的厚度,并且有些地方的边缘断开了。
① 进行 Imclose 运算:
对灰度图像执行形态学闭运算,即使用同样的结构元素先对图像进行膨胀操
作后进行腐蚀操作。
② 进行 skel 运算:
移除目标边界像素,但是不允许目标分隔开,保留下来的像素组合成图像的骨架。

在这里插入图片描述

step4设定边界

后面的 imfill 运算如果不在图像周围加上白色边界,使拍摄不完整的红细胞图形闭合,则无法填充这些细胞。而这些细胞会在第六步时被当作杂质删除掉。
这种情况下只能提取出拍摄完整的红细胞的边界。

step5填充孔洞

进行 imfill 运算,该函数用于填充图像区域和空洞。注意到这时也填充了很多明显不是红细胞的小圆。在这里插入图片描述

step6筛选红细胞

为了删除图像中明显不是红细胞的小圆以及很多噪点,设定一定阈值,图形的半径小于一定阈值,则灰度全部转化为 0(黑色)。利用闭操作对图像进行图形元素的筛选。经调参,可以删除规格小于 1515 的图形,保留大于 1616 的图形。这时删除非红细胞的小圆效果最好。
在这里插入图片描述

step7canny 边缘检测

边缘检测主要是通过一些手段检测数字图像中明暗变化剧烈(即梯度变化比较大)像素点,偏向于图像中像素点的变化。如 canny 边缘检测,结果通常保存在和源图片一样尺寸和类型的边缘图中。
在这里插入图片描述

step8删除边界

删除第四步添加的白色边界,可以得到最终的轮廓图 。此时,拍摄完全的细胞轮廓提取较好。但同时也注意到,未拍摄完全的红细胞的边界出现了一定程度的失真。考虑可以调整第六步的算法,删除小圆,噪点的同时,不对红细胞的轮廓造成影响。

这道纳新题目大致经过一天多完成。虽然是小白一个,对算法完全不懂,但也经历了自己设计的成就感,处理出图像时的兴奋和快乐。完成了第一篇参考文章提出的展望部分。根据作者提出的思路,解决了其图像处理的杂质和双边缘的问题。

参考文献:课后作业——红细胞边缘检测
闭操作筛选图像区域

最后贴上matlab代码:

I=imread('C:\Users\Desktop\实验中心\1.bmp');
sigma = 1.6;     
N = 20;           
N_row = 2*N+1;  
gausFilter = fspecial('gaussian',[N_row N_row],sigma);
I=imfilter(I,gausFilter,'conv'); 
figure;imshow(I)
I=imadjust(I,[50/255,150/255],[30/255,250/255]);%step1 灰度拉伸
figure;imshow(I);
Size=size(I);   

for i=1:Size(1)  %step2 二值化处理
    for j=1:Size(2)
        if I(i,j)<=125&&I(i,j)>=50
            I(i,j)=255;
        else
            I(i,j)=-2;
        end
    end
end
figure;imshow(I);
SE=strel('square',5);

I=imclose(I,SE);
I=bwmorph(I,'skel',Inf);%step3 对二值图像进行数字形态学运算
figure;imshow(I);
for i=1:Size(1)%step4 设定边界
    I(i,1)=255;
end
for j=1:Size(2)
     I(1,j)=255;
end
for i=1:(Size(1))
    I(i,Size(2))=255;
end
for j=1:(Size(2)*0.30)
     I(Size(1),j)=255;
end
figure;imshow(I);
I=imfill(I,'holes');%strp5  填充图像的孔洞
img=I;  %step6 筛选红细胞
img=im2bw(img,10/255);

sc=ones(15,15);
 
%确定结构元素的半径,以便对原图像进行边界的扩展
Hsc=size(sc,1);
Wsc=size(sc,2);
Rh=ceil(size(sc,1)/2); 
Rw=ceil(size(sc,2)/2); 
Csc=sum(sc(:)); 
 
Height=size(img,1);
Width=size(img,2);
 
imgin=zeros(Height+Hsc-1,Width+Wsc-1);
imgin(Rh:Rh+Height-1,Rw:Rw+Width-1)=img;
imgout=imgin;
for i=Rh:Rh+Height-1
    for j=Rw:Rw+Width-1
        pitch=imgin(i-(Rh-1):i+Hsc-Rh,j-(Rw-1):j+Wsc-Rw);
       convtmp= pitch.*sc; 
      
        if sum(convtmp(:))<Csc
             imgout(i,j)=0;
        else
            imgout(i,j)=1;
        end
    end
end
imgout1=imgout;
for i=Rh:Rh+Height-1
    for j=Rw:Rw+Width-1
        pitch=imgout(i-(Rh-1):i+Hsc-Rh,j-(Rw-1):j+Wsc-Rw);
       convtmp= pitch.*sc;
        if sum(convtmp(:))>0 
             imgout1(i,j)=1;
        else
            imgout1(i,j)=0;
        end
    end
end
countours=edge(imgout1,'canny'); %step7 canny边缘检测
figure;imshow(contours);  


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值