Main Content

blockproc

영상을 개별 블록 단위로 처리

설명

예제

B = blockproc(A,[m n],fun)은 크기가 [m n]인 각 개별 블록에 함수 fun을 적용한 결과를 출력 영상 B에 결합하는 방식으로 입력 영상 A를 처리합니다.

예제

B = blockproc(src_filename,[m n],fun)은 파일 이름이 src_filename인 영상을 블록별로 한 번에 하나씩 읽어 들이는 방식으로 영상을 처리합니다. 이 구문은 큰 영상을 처리하는 데 유용합니다.

B = blockproc(adapter,[m n],fun)ImageAdapter 객체인 adapter로 지정된 소스 영상을 처리합니다. 특정 영상 파일 형식의 읽기 및 쓰기를 지원하는 사용자 지정 API가 필요한 경우 이 구문을 사용하십시오.

예제

B = blockproc(___,Name,Value)는 이름-값 쌍 인수를 사용하여 블록 동작의 다양한 특성을 제어합니다.

예제

모두 축소

영상을 작업 공간으로 읽어 들입니다.

I = imread('pears.png');

블록 처리 함수를 만듭니다.

fun = @(block_struct) imresize(block_struct.data,0.15);

영상을 블록별로 처리합니다.

I2 = blockproc(I,[100 100],fun);

원본 영상과 처리된 영상을 표시합니다.

figure;
imshow(I);

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow(I2);

Figure contains an axes object. The axes object contains an object of type image.

블록 처리 함수를 만듭니다.

fun = @(block_struct) ...
   std2(block_struct.data) * ones(size(block_struct.data));

입력 영상을 파일 이름으로 지정하여 블록 처리 연산을 수행합니다.

I2 = blockproc('moon.tif',[32 32],fun);

원본 영상과 처리된 영상을 표시합니다.

figure;
imshow('moon.tif');

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow(I2,[]);

Figure contains an axes object. The axes object contains an object of type image.

영상을 작업 공간으로 읽어 들입니다.

I = imread('peppers.png');

블록 처리 함수를 만듭니다.

fun = @(block_struct) block_struct.data(:,:,[2 1 3]);

블록 처리 연산을 수행합니다.

blockproc(I,[200 200],fun,'Destination','grb_peppers.tif');

원본 영상과 처리된 영상을 표시합니다.

figure;
imshow('peppers.png');

Figure contains an axes object. The axes object contains an object of type image.

figure;
imshow('grb_peppers.tif');

Figure contains an axes object. The axes object contains an object of type image.

참고: 이 예제를 실행하려면 "largeImage.tif"를 변환하고자 하는 파일의 이름으로 바꿔야 합니다.

블록 처리 함수를 만듭니다.

fun = @(block_struct) block_struct.data;

TIFF 영상을 새로운 JPEG2000 영상으로 변환합니다. "largeImage.tif"를 실제 영상 파일의 이름으로 바꿉니다.

blockproc("largeImage.tif",[1024 1024],fun,"Destination","New.jp2");

입력 인수

모두 축소

처리할 영상으로, 숫자형 배열로 지정됩니다.

소스 파일 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 파일은 다음 파일 형식 중 하나여야 하며 나열된 파일 확장자 중 하나로 명명되어야 합니다.

  • TIFF(*.tif, *.tiff)

  • JPEG2000(*.jp2, *.jpf, *.jpx, *.j2c, *.j2k)

데이터형: char | string

영상 어댑터로, ImageAdapter 객체로 지정됩니다. ImageAdapter는 사용자 정의 클래스로, blockproc에 특정 영상 파일 형식의 읽기 및 쓰기를 지원하는 공통 API를 제공합니다. 자세한 내용은 Perform Block Processing on Image Files in Unsupported Formats 항목을 참조하십시오.

블록 크기로, 요소를 2개 가진 벡터로 지정됩니다. m은 블록의 행 개수이고 n은 열 개수입니다.

함수 핸들로, 핸들로 지정됩니다. 함수는 block_struct를 입력값으로 받아서 배열, 벡터 또는 스칼라를 반환해야 합니다. fun이 빈 값을 반환하는 경우 blockproc는 출력값을 생성하지 않고, 모든 블록을 처리한 후에 빈 값을 반환합니다.

함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: B = blockproc(A,[m,n],fun,BorderSize=[8 4])는 각 블록 주위에 행과 열이 각각 8개와 4개가 있는 테두리를 생성합니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: B = blockproc(A,[m,n],fun,"BorderSize",[8 4])는 각 블록 주위에 행과 열이 각각 8개와 4개가 있는 테두리를 생성합니다.

출력값의 대상으로, 다음 중 하나로 지정됩니다. Destination 인수를 지정하면 blockproc는 처리된 영상을 출력 인수로 반환하는 대신 출력값을 대상 파일에 씁니다.

  • 대상 파일 이름을 갖는 문자형 벡터 또는 string형 스칼라. 파일은 다음 파일 형식 중 하나여야 하며 나열된 파일 확장자 중 하나로 명명되어야 합니다.

    • TIFF(*.tif, *.tiff)

    • JPEG2000(*.jp2, *.j2c, *.j2k)

    이 이름을 갖는 파일이 존재하는 경우에는 이 파일을 덮어씁니다.

  • ImageAdapter 객체. 이 객체는 특정 영상 파일 형식의 읽기 및 쓰기를 지원하는 공통 API를 제공합니다. 자세한 내용은 Perform Block Processing on Image Files in Unsupported Formats 항목을 참조하십시오.

Destination 인수는 출력값의 크기가 너무 커서 메모리에 담을 수 없을 것으로 예상되는 경우에 유용합니다. 이 인수는 임의로 큰 영상을 위한 파일 대 파일 영상 처리 워크플로를 제공합니다.

참고

Destination 인수를 지정할 경우에는 출력 인수를 요청할 수 없습니다.

각 블록에 추가할 테두리 픽셀의 개수로, 양의 정수로 구성된 요소를 2개 가진 [v h] 형식의 벡터로 지정됩니다. 이 함수는 각 블록의 위와 아래에 v개의 행을 추가하고 각 블록의 왼쪽과 오른쪽에 h개의 열을 추가합니다. 결과로 생성되는 각 블록의 크기는 다음과 같습니다.

[m+2*v, n+2*h]

기본적으로, 함수는 fun의 결과에서 테두리를 자동으로 제거합니다. 자세한 내용은 TrimBorder 인수를 참조하십시오.

함수는 영상 가장자리를 넘어가는 테두리를 갖는 블록을 0으로 채웁니다.

불완전 블록을 완전한 크기로 만들기 위해 채울지 여부로, false 또는 true로 지정됩니다. 불완전 블록은 영상 크기가 블록 크기로 정확히 나누어 떨어지지 않을 때 발생합니다. 불완전 블록이 있는 경우, 이는 영상의 오른쪽 가장자리와 아래쪽 가장자리에 있습니다.

true로 설정하면 blockproc는 불완전 블록을 채워 m×n의 완전한 크기의 블록으로 만듭니다. 디폴트 값은 false입니다. 즉, 이 함수는 불완전 블록을 채우지 않고 있는 그대로 처리합니다. blockproc는 필요 시 0을 사용하여 불완전 블록을 채웁니다.

영상 경계를 채우는 데 사용할 방법으로, 다음 중 하나로 지정됩니다.

설명
"replicate"테두리 요소를 반복하여 채웁니다.
"symmetric"영상 자체를 대칭 복사하여 영상을 채웁니다.
숫자형 스칼라영상을 스칼라 값으로 채웁니다. 기본적으로, 영상 경계는 값 0으로 채워집니다.

데이터형: char | string

사용자 함수의 출력값에서 테두리 픽셀을 제거할지 여부로, true 또는 false로 지정됩니다. true로 설정하면 blockproc 함수는 사용자 함수 fun의 출력값에서 테두리 픽셀을 제거합니다. 함수는 fun의 출력값의 위쪽과 아래쪽에서 v개의 행을 제거하고 왼쪽과 오른쪽 가장자리에서 h개의 열을 제거합니다. BorderSize 인수는 vh를 정의합니다.

병렬 처리를 사용할지 여부로, false 또는 true로 지정됩니다. Parallel Computing Toolbox™가 설치되어 있는 경우, true로 설정하면 MATLAB®은 로컬 컴퓨터에서 워커의 병렬 풀을 자동으로 엽니다. blockproc는 계산을 사용 가능한 워커 전체에서 실행합니다. 자세한 내용은 Parallel Block Processing on Large Image Files 항목을 참조하십시오.

대기 표시줄을 표시할지 여부로, true 또는 false로 지정됩니다. true로 설정하면 blockproc는 장시간 진행되는 연산의 진행률을 나타내는 대기 표시줄을 표시합니다. blockproc에서 대기 표시줄을 표시하지 않게 하려면 DisplayWaitbarfalse로 설정하십시오.

출력 인수

모두 축소

처리된 영상으로, 숫자형 배열로 반환됩니다.

세부 정보

모두 축소

블록 구조체

블록 구조체는 블록 데이터와 해당 블록에 대한 기타 정보를 포함하는 MATLAB 구조체입니다. 블록 구조체의 필드는 다음과 같습니다.

필드설명
border[v h] 형식의 요소를 2개 가진 벡터. border 필드는 데이터 블록 주위의 세로 및 가로 채우기 크기를 지정합니다. 자세한 내용은 BorderSize 인수를 참조하십시오.
blockSize[rows cols] 형식의 요소를 2개 가진 벡터. blockSize 필드는 블록 데이터의 크기를 지정합니다. 테두리가 지정된 경우 이 크기는 테두리 픽셀을 포함하지 않습니다.
data블록 데이터로 구성된 m×n 또는 m×n×p 배열.
imageSize[rows cols] 형식의 요소를 2개 가진 벡터. imageSize 필드는 입력 영상의 전체 크기를 지정합니다.
location[row col] 형식의 요소를 2개 가진 벡터. location 필드는 입력 영상의 블록 데이터의 첫 번째 픽셀 위치(행의 최소값, 열의 최소값)를 지정합니다. 테두리가 지정된 경우 이 위치는 추가된 테두리 픽셀이 아닌 이산 블록 데이터의 첫 번째 픽셀을 나타냅니다.

  • 적절한 블록 크기를 선택하면 성능을 대폭 향상시킬 수 있습니다. 자세한 내용은 Block Size and Performance 항목을 참조하십시오.

  • 출력 영상 B의 크기가 너무 커서 메모리에 담을 수 없는 경우에는 출력 인수를 지정하지 말고 Destination 이름-값 쌍의 인수를 대신 사용하여 파일에 출력값을 쓰십시오.

  • blockproc는 BigTIFF 영상을 읽어 들일 수 있지만 BigTIFF 영상을 파일에 쓰는 작업은 제한적으로 지원됩니다. 영상을 파일에 쓰면 blockproc는 파일 크기에 따라 자동으로 파일 형식을 선택합니다. 영상이 4.0Gb보다 작거나 같은 경우 blockproc는 영상을 표준 TIFF 영상으로 저장합니다. 파일 크기가 4.0Gb보다 큰 경우 blockproc는 영상을 BigTIFF 영상으로 저장합니다.

    파일 크기가 4.0Gb보다 작거나 크면 blockproc는 파일 형식을 BigTIFF로 지정할 수 있는 인수를 제공하지 않습니다. 크기가 작은 영상을 BigTIFF 파일로 쓰려면 adapter 인수를 사용하여 사용자 지정 영상 어댑터를 지정하십시오. 자세한 내용은 TIFF, BigTIFF, and blockproc를 참조하십시오.

  • 쓰여진 TIFF 파일이 표준 TIFF인지 BigTIFF인지 확인하려면 imfinfo 함수를 사용하여 영상 형식 시그니처를 쿼리하십시오.

    tiffinfo = imfinfo(Destination);
    tiffformat = tiffinfo.FormatSignature

    tiffformat의 0이 아닌 마지막 값이 42라면 그 파일은 표준 TIFF 형식입니다. 0이 아닌 마지막 값이 43이라면 그 파일은 BigTIFF 형식입니다.

확장 기능

버전 내역

R2009b에 개발됨