主要内容

使用蒙版有效地处理阻塞图像

此示例显示如何通过使用掩码隔离ROI有效地处理阻塞图像。

一些大图像来源只有一小部分图像具有有意义的数据。您可以通过将处理限制到包含有意义数据的感兴趣区域(ROI)的处理来改进总处理时间。使用面具定义ROI。面具是一个逻辑图像真正的像素代表ROI。

在阻塞图像工作流中,掩码表示与图像数据相同的空间区域,但不需要与图像大小相同。为了进一步提高工作流的效率,从一个粗糙的图像创建一个遮罩,特别是适合内存的图像。然后,使用粗糙蒙版来处理较精细的图像。

使用CAMELYON16数据集中图像“tumor_091.tif”的修改版本创建一个阻塞图像。原始图像是包含肿瘤组织的淋巴结的训练图像。原始图像有8个分辨率等级,最好的等级分辨率为53760 × 61440。修改后的图像只有三个粗分辨率。修改后的图像的空间参考已经被调整,以加强一致的宽高比,并在每一层配准特征。

bim = blockedimage('tumor_091r.tif');

通过使用显示阻塞图像BigimageShow.功能。

bigimageshow (bim);

创建面具

确定粗糙级别的图像大小。

coarselevel = bim.numlevels;%最大值是最粗糙的水平coarseLevelSize = bim.Size (coarseLevel:)
coarseLevelSize =1×3625 670 3.

在粗糙的分辨率级别获取图像。

imlowres =聚集(bim);

您可以使用粗略级别生成掩码图像分段器应用程序。该应用预期灰度输入图像,因此从粗糙图像中获取亮度通道。

imLowResL = rgb2lightness (imLowRes);

跑步图像分段器App,在命令窗口中输入命令:ImageEstmoner(imlowresl).定义蒙版后,导出掩码,BW.或者使用用于创建掩码的应用程序的代码。该示例的本节使用从应用程序导出的代码。运行此代码以创建来自粗输入图像的掩码。

%------------------------------------------------%将输入数据规范化到[0,1]范围内。Xmin = min(imlowresl(:));xmax = max(imlowresl(:));如果isequal(Xmax,Xmin) imLowResL = 0*imLowResL;别的imlowresl =(imlowresl  -  xmin)./(xmax  -  Xmin);结尾% Threshold image -全局阈值bw = imbinarize(imlowresl);%逆变掩码BW = imcomplement (BW);用正方形打开面膜宽度= 3;se = strel('正方形', 宽度);bw = imopen(bw,se);%------------------------------------------------imshow(bw)

使用与输入掩模相同的空间引用,从掩码中创建一个阻塞图像。

bmask = blockedImage (BW,“WorldEnd”,bim.worldend(3,1:2));

显示面具有绿色背景。

H = BigimagesHow(BIM);H.Parent.Color =.'G';H.Parent.Alphamap = [1 .5];H.Alphadata = BMASK;H.Alphadatamping =.“直接”;


              

调整包含阈值以覆盖感兴趣的区域

申请函数每次处理一个块的图像。你可以使用“InclusionThreshold”使用掩码的属性指定哪个块申请函数使用。包含阈值指定掩码像素的百分比真正的为了申请处理块。

突出显示申请将使用默认包含阈值处理,0.5.只有中心块(用绿色突出显示)将被处理。

H = BigimagesHow(BIM);ShowMask(H,BMASK,1);标题(“带有默认包含阈值的掩码”

为了处理图像的更多块,减少包含阈值。

ShowMask(H,BMASK,1,“InclusionThreshold”,0.4);标题(“InclusionThreshold = = 0.4”

在极端情况下,处理所有至少有一个的块真正的掩模中的像素。要指定此选项,请设置“InclusionThreshold”财产0..并非包括图像的所有块。

ShowMask(H,BMASK,1,“InclusionThreshold”, 0);标题(“InclusionThreshold = = 0”

使用任何值的掩码“InclusionThreshold”将降低总执行时间,因为申请将比完整图像处理更少的块。随着图像分辨率的提高和处理管道的复杂性的增加,使用掩码的好处变得更加显著。

测量过滤全图像的执行时间。

应用(bim,......@ (bs) imnlmfilt (bs。数据,“DegreeOfSmoothing”,15));TffullProcessing = TOC;

使用ROI测量仅筛选块的执行时间。

bls = selectblocklocations(bim,“面具”,bmask,“InclusionThreshold”,0);tic boutmasked = apply(bim,......@ (bs) imnlmfilt (bs。数据,“DegreeOfSmoothing”,15),......'blocklocationset'美国劳工统计局);tMaskedProcessing = toc;bigimageshow(布特蒙面)defaultBlockSize = bim_blocksize(1,:); / /设置图片大小标题([“使用带有默认块的蒙版的处理图像== ['......num2str (defaultBlockSize)“]”]);

比较处理完整图像和只处理感兴趣区域中的块的执行时间。

DISP([“使用面罩加速:”......num2str(tffullprocessing / tmaskedprocessing)'X']);
加速使用掩码:1.6988x

调整块大小以遵循感兴趣区域的轮廓

您可以减少块大小以在ROI周围获得更严格的包装。对于某些块大小,这将减少执行时间,因为申请将处理ROI之外的更少的像素。但是,如果块大小太小,则性能将减小,因为处理较大数量的块的开销将偏移处理的像素数量。

突出显示申请将使用较小的块大小进行处理。要指定块大小,请设置'blocksize'财产。

blocksize = [512 512];H = BigimagesHow(BIM);ShowMask(H,BMASK,1,'blocksize'blockSize,“InclusionThreshold”, 0);标题([“BlockSize = = ['num2str(blocksize)'], InclusionThreshold == 0'])

测量以较小的块大小过滤ROI内所有块的执行时间。

bls = selectblocklocations(bim,“面具”,bmask,“InclusionThreshold”,0);tic boutmasked = apply(bim,......@ (bs) imnlmfilt (bs。数据,“DegreeOfSmoothing”,15),......'blocklocationset'美国劳工统计局);

tsmallerblockprocessing = toc;Bigimageshow(boutmasked);标题(['处理图像使用蒙版与BlockSize == ['......num2str(blocksize)“]”]);

与较大的块相比,比较处理整个ROI的执行时间,较小的块。

DISP(['额外的加速使用掩码与减少的块大小:'......num2str(tmaskedprocessing / tsmallerblockprocessing)'X']);
额外的加速使用减少块大小的掩码:0.97433x

也可以看看

||