부분 영상 또는 낮은 해상도를 사용하여 효율적으로 블록 형식 영상 처리하기
이 예제에서는 고해상도 영상의 작은 대표적 샘플들에 대해 계산할 수 있도록 하는 두 가지 전략을 사용하여 블록 형식 영상을 신속하게 처리하는 방법을 보여줍니다.
블록 형식 영상 처리는 시간이 많이 소요될 수 있고, 따라서 알고리즘의 반복적 개발은 막대한 비용이 듭니다. 이런 피드백 주기를 단축하는 두 가지 일반적인 방법은 낮은 해상도의 영상에 대해 반복하거나 블록 형식 영상의 부분 영역에 대해 반복하는 것입니다. 이 예제에서는 블록 형식 영상에 대한 분할 마스크를 생성하는 두 가지 접근법을 모두 보여줍니다.
Parallel Computing Toolbox™가 설치되어 있다면 여러 워커를 사용하여 처리를 더욱 가속화할 수 있습니다.
CAMELYON16 데이터 세트 내 "tumor_091.tif" 영상의 수정본을 사용하여 blockedImage 객체를 생성해 보겠습니다. 원본 영상은 종양 조직을 포함한 림프절의 훈련 영상입니다. 원본 영상은 8개의 해상도 수준을 가지며, 가장 높은 수준은 53760×61440의 해상도를 가집니다. 수정된 영상은 세 개의 낮은 해상도 수준만을 가집니다. 수정된 영상의 공간 참조는 일관된 종횡비를 유지하고 각 수준에서 특징을 정합하도록 조정되었습니다.
bim = blockedImage("tumor_091R.tif");bigimageshow 함수를 사용하여 블록 형식 영상을 표시합니다.
bigimageshow(bim);

저해상도 영상을 사용하여 처리 가속화하기
많은 블록 형식 영상에는 가장 높은 고해상도 영상의 낮은 저해상도 버전을 비롯한 여러 해상도 수준이 포함되어 있습니다. 일반적으로 개별 픽셀 값의 분포는 모든 수준에서 대략적으로 균등해야 합니다. 이 가정을 활용하면, 낮은 수준에서 전역 통계량을 계산한 후 해당 통계량을 사용하여 더 높은 수준을 처리할 수 있습니다.
가장 낮은 수준에서 영상을 추출한 후, 이 영상을 회색조 영상으로 변환합니다.
imLowRes = gather(bim); imLowResGray = im2gray(imLowRes);
영상을 두 개의 클래스로 이진화하고 결과를 표시합니다.
thresh = graythresh(imLowResGray); imLowResQuant = imbinarize(imLowResGray,thresh); imshow(imLowResQuant)

가장 큰 영상에서 검증합니다. 결과를 반전시켜 염색된 영역의 마스크를 얻습니다.
bq = apply(bim,@(bs)~imbinarize(rgb2gray(bs.Data),thresh));
가장 높은 수준에서 결과를 시각화합니다.
bigimageshow(bq,CDataMapping="scaled");
블록 형식 영상의 부분 영역을 사용하여 처리 가속화하기
대형 영상을 처리하는 또 다른 접근법은 관심 특징을 가진 더 작은 영역을 추출하는 것입니다. ROI로부터 통계량을 계산한 후, 해당 통계량을 사용하여 전체 고해상도 영상을 처리할 수 있습니다.
관심 영역을 확대합니다.
bigimageshow(bim); xlim([2400,3300]) ylim([900 1700])

가장 높은 수준에서 보이는 영역을 추출합니다.
xrange = xlim; yrange = ylim; imRegion = getRegion(bim,[900 2400],[1700 3300],Level=1); imshow(imRegion);

이 영역으로 프로토타입을 생성한 후 결과를 표시합니다.
imRegionGray = rgb2gray(imRegion); thresh = graythresh(imRegionGray); imLowResQuant = ~imbinarize(imRegionGray,thresh); imshow(imLowResQuant)

전체 블록 형식 영상에서 검증하고 결과를 표시합니다.
bq = apply(bim,@(bs)~imbinarize(rgb2gray(bs.Data),thresh));
bigimageshow(bq,CDataMapping="scaled");
Parallel Computing Toolbox를 사용하여 처리 가속화하기
Parallel Computing Toolbox가 설치되어 있다면, 처리를 여러 워커에 걸쳐 분산하여 처리를 가속화할 수 있습니다. 영상을 병렬로 처리하려면 runInParallel 변수를 true로 설정하십시오.
runInParallel = false; if runInParallel % Location for output, which should be accessible on the client and all % workers and should be empty outDir = tempname; % Open a pool p = gcp; % Ensure workers are on the same folder as the file to be able to % access it using just the relative path sourceDir = fileparts(which("tumor_091R.tif")); spmd cd(sourceDir) end % Run in parallel bq = apply(bim, ... @(bs)~imbinarize(rgb2gray(bs.Data),thresh),UseParallel=true, ... OutputLocation=outDir); end