MATLAB imfreehand函数 实现图像分割标注

来源:互联网 发布:mac log4j的输出路径 编辑:程序博客网 时间:2024/05/17 22:55

声明:本人菜鸟一个,刚刚开始深度学习,进行医学图像处理,要用matlab 做个界面给医生用来标注乳腺肿瘤,将肿瘤给标记出来,以便后续分类使用

用途: 可以实现在原图中将肿瘤标记出来,也可以继续讲标记分割出来的肿瘤保存为图片



imfreehand函数基本操作就是在当前图形句柄(大致意思就是刚刚imshow出来的figure图形)的图像上画一个闭合曲线(ROI),标记出的我们感兴趣的区域。


步骤:

1、读取图像,并显示


(这里因为我的图像是医学图像,所以用dicomread进行读取,一般图片imread 就行了)

进行此操作后,当前图形句柄就是imshow产生的图形,里面显示的就是I

2、然后在命令行输入 h =imfreehand  (这里h就是进行imfreehand操作生成的句柄名称,之后的操作可以使用,imfreehand函数可以有参数,可以自己查看)

3、进行2步骤后,鼠标放在图片上便可以画了,画时鼠标按下拖拽即可



这里一定是闭合的曲线,首尾相连

4、这样h句柄里就包括了刚刚进行划线这个操作说产生的一些信息,如这条线上每个点的坐标,它会以nX2的数组形式保存下来,

获取这些信息要用到一些方法,imfreehand 函数里有讲

例如:

position = getPosition(h)会显示这条线的位置坐标

mask  = createMask(h);   会将你画的闭合区域的mask 以矩阵的形式保存下来,矩阵大小和输入图像尺寸相同,不过在闭合曲线内的值全为1,曲线外全为0,如果将这个矩阵mask与原图矩阵I数乘,则可得到

5、以createMask 为例,获取闭合曲线内的图像

如第4歩,


6 、将这个矩阵与原图进行数乘,产生一个新矩阵,显示就是闭合曲线内图像

这里报错是因为原图是三维的,而mask只是表示位置的二维矩阵,变一下就好了,最终可以得到肿瘤(这里举个例子,画的实际不是肿瘤)的counter了。

1 1
原创粉丝点击