此示例显示如何通过使用掩码隔离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