此示例显示如何从一组ROI创建带标签的分块图像。
在本例中,您使用两种方法来获取和显示标记数据。一种方法是使用多边形ROI对象存储肿瘤和正常组织区域边界的坐标。的多嵌合体图像
函数将ROI坐标转换为带标签的分块图像。第二种方法使用遮罩将图像分为组织和背景。此示例将ROI和遮罩图像中的信息结合起来,以创建一个具有对应于肿瘤、正常组织和背景区域的数字像素标签的单个块图像。
使用CAMELYON16数据集中包含肿瘤组织的淋巴结训练图像的修改版本创建块图像。修改后的图像有三个粗分辨率。空间参考已经被调整,以加强一致的宽高比,并在每个级别注册特征。
bim=块图像(“肿瘤_091R.tif”);
CAMELYON16数据集提供了肿瘤和正常区域的标签,作为一组坐标,指定了相对于最佳分辨率级别的手工标注区域边界。当像素同时存在于正常区域和肿瘤区域的边界内时,这些像素的正确标记就是正常组织。
为阻塞的图像加载标签数据。的标签的修改版本tumor_091.tif
CAMELYON16数据集中的图像。原始标签以XML格式存储。修改后的标签已重新采样并保存为MAT文件。
ROI点=负载(“labelledROIs.mat”)
旋转点=带字段的结构:非癌区:{[46×2双]}癌区:{6×1细胞}
创建多边形ROI对象,存储肿瘤边界和正常组织边界的坐标。
tumorpolyys = cellfun(@(position) images.roi.Polygon(...位置=位置,可见=“上”颜色=“r”),...roiPoints.cancerRegions);normalpolyys = cellfun(@(position) images.roi.Polygon(...位置=位置,可见=“上”颜色=“g”),...非癌症区域);
显示覆盖多边形roi的图像。由于roi与图像具有相同的坐标系统,因此改变显示图像的分辨率仍然能够准确地呈现roi。
h=bigimageshow(bim);集合(tumorPolys,父项=gca);集合(normalPolys,父项=gca);标题(“分辨率级别:”+ num2str (h.ResolutionLevel));
放大一个ROI。肿瘤区域边界显示为红色,正常组织内部区域周围显示为绿色。
xlim([3940 4290])ylim([2680 3010])标题(“分辨率级别:”+ num2str (h.ResolutionLevel));
使用多嵌合体图像
函数创建ROI坐标数据的标记块图像。的多嵌合体图像
该函数需要ROI坐标、ROI标签和输出块图像的大小作为输入。
获得xy-协调正常区域和肿瘤区域的数据,并将它们合并为单个roiPositions
细胞阵列。
normalRegions = roiPoints.nonCancerRegions;tumorRegions = roiPoints.cancerRegions;roiPositions = [normalRegions;tumorRegions];
找出正常区域和肿瘤区域的数量,并分配标签1
到正常组织和标签2
去肿瘤组织。按指定的相同顺序指定标签roiPositions
。将标签指定为uint8
值以减少存储所需的内存。
numNormalRegions=numel(正常区域);numTumorRegions=numel(肿瘤区域);roiLabelIDs=[个(numNormalRegions,1,“uint8”); 2*一(numtorregions,1,“uint8”)];
为新阻止的图像选择所需的分辨率级别。此选择是效率和精度之间的折衷。使用较粗的分辨率级别可减少处理时间和存储大小。使用较细的分辨率级别可增加遮罩中保留的细节级别。粗分辨率级别可用于规则ROI(如多边形)s、 对于小型徒手ROI,精细分辨率级别可能更合适。对于本例,请使用中间分辨率级别。
maskLevel=2;
指定新阻止图像的图像大小以匹配原始图像的大小,bim
,在所需的分辨率级别。
图象尺寸= bim.Size (maskLevel 1:2);
创建一个有标签的阻塞图像。保持原始块图像的空间引用,bim
,在所需的分辨率级别。默认情况下,不在任何ROI内的像素被指定为数字标签0
.
图象尺寸,bROILabels = polyToBlockedImage (roiPositions roiLabelIDs BlockSize = bim.BlockSize (maskLevel 1:2),...WorldStart=bim.WorldStart(maskLevel,1:2),worldesend=bim.worldesend(maskLevel,1:2));
显示覆盖在原始图像上的标记阻塞图像。红色显示肿瘤区域,绿色显示完全被肿瘤包围的正常组织区域。背景及与背景相连的正常组织以蓝色显示,说明连接的正常区域被错误地归类为背景。
hbim = bigimageshow (bim);showlabels (hbim bROILabels Colormap = [0 0 1;0 1 0;1 0 0]);
放大显示为绿色的正常组织区域。可视化地验证ROI边界是否有足够的细节表示。
ylim([2680 3010])
使用图像分割创建可正确区分正常组织和背景的遮罩。由于阈值化需要将基础图像数据读入内存,且背景和前景区域足够大,因此最粗糙的分辨率级别是合适的。遮罩为1
(符合事实的
),用于灰度值小于130的像素。填充小洞的掩模执行形态关闭使用bwmorph
函数。
btissueMask=应用(bim,...@(bs)bwmorph(RGB2GRY)(bs.数据)<130,“关闭”),级别= 3);bigimageshow (btissueMask);
将组织掩模和感兴趣区域标签数据合并成最终的标记块图像。虽然ROI图像是在比组织掩膜更好的分辨率水平上创建的,但它们可以一起处理,因为它们来自相同的图像,具有相同的世界范围。使用组合带
helper函数,在本例末尾定义。
bLabels=apply(bROILabels、@combineLabels、ExtraImages=btissueMask);
显示覆盖在原始图像上的标记阻塞图像。三个标签(正常、肿瘤和背景)分别以绿色、红色和蓝色显示。
hbim=bigimageshow(bim);showlabels(hbim、bLabels、Colormap=[0 0 1;0 1 0;1 0 0]);标题(“背景(蓝色),正常组织(绿色),肿瘤(红色)”)
放大感兴趣的区域以更详细地检查。
ylim([2680 3010])
组合带
将基于roi的标签图像和基于掩码的标签图像合并为单个标签图像。
作用btissueMask blabel = combineLabels (bs)%纸巾遮罩块尺寸较小btissueMask=imresize(btissueMask,size(bs.Data));%转换为标签,0是背景,1是前景。blabel=uint8(btissueMask);%用2个标记肿瘤区域blabel(bs.Data==2)=2;结束
块状图像
|bigimageshow
|blockedImageDatastore