MATLAB Language
이미지 처리
수색…
기본 이미지 I / O
>> img = imread('football.jpg');
imread
를 사용하여 이미지 파일을 MATLAB의 행렬로 읽습니다.
이미지를 imread
메모리에 ND 배열로 저장됩니다.
>> size(img)
ans =
256 320 3
이미지 'football.jpg'
는 256 행과 320 열을 가지며 빨강, 녹색 및 파랑의 3 가지 색상 채널을 가지고 있습니다.
이제 미러링 할 수 있습니다.
>> mirrored = img(:, end:-1:1, :); %// like mirroring any ND-array in Matlab
마지막으로 imwrite
사용하여 이미지로 다시 작성하십시오.
>> imwrite(mirrored, 'mirrored_football.jpg');
인터넷에서 이미지 검색
인터넷에 연결되어있는 한 하이퍼 링크에서 이미지를 읽을 수 있습니다.
I=imread('https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png');
2D FFT를 사용한 필터링
1D 신호의 경우와 마찬가지로 푸리에 변환을 적용하고 주파수 영역의 필터를 곱한 다음 공간 영역으로 다시 변환하여 이미지를 필터링 할 수 있습니다. 다음은 Matlab을 사용하여 이미지에 하이 패스 필터 또는 로우 패스 필터를 적용하는 방법입니다.
image
원래의 필터링되지 않은 image
라고합시다. 2D FFT를 계산하는 방법은 다음과 같습니다.
ft = fftshift(fft2(image));
이제 스펙트럼의 일부를 제외하려면 픽셀 값을 0으로 설정해야합니다. 원본 이미지에 포함 된 공간 주파수는 가운데에서 가장자리로 매핑됩니다 ( fftshift
사용 후). 낮은 주파수를 제외하기 위해 중앙 원형 영역을 0으로 설정합니다.
다음은 내장 함수를 사용하여 반경 D
로 디스크 모양의 바이너리 마스크를 생성하는 방법입니다.
[x y ~] = size(ft);
D = 20;
mask = fspecial('disk', D) == 0;
mask = imresize(padarray(mask, [floor((x/2)-D) floor((y/2)-D)], 1, 'both'), [x y]);
주파수 영역 이미지를 마스킹하는 것은 FFT를 위에서 얻은 바이너리 마스크와 포인트 방식으로 곱하여 수행 할 수있다.
masked_ft = ft .* mask;
이제 역 FFT를 계산해 봅시다.
filtered_image = ifft2(ifftshift(masked_ft), 'symmetric');
이미지의 고주파수는 날카로운 모서리이므로이 고역 필터를 사용하여 이미지를 선명하게 만들 수 있습니다.
이미지 필터링
이미지 rgbImg
이 있다고 가정 해 rgbImg
(예 : imread
를 사용하여 읽음).
>> rgbImg = imread('pears.png');
>> figure, imshow(rgbImg), title('Original Image')
fspecial
을 사용하여 2D 필터를 만듭니다.
>> h = fspecial('disk', 7);
>> figure, imshow(h, []), title('Filter')
imfilter
를 사용하여 이미지에 필터를 적용하십시오.
>> filteredRgbImg = imfilter(rgbImg, h);
>> figure, imshow(filteredRgbImg), title('Filtered Image')
연결된 영역의 특성 측정
바이너리 이미지 인 bwImg
시작하여 연결된 객체가 많이 포함되어 있습니다.
>> bwImg = imread('blobs.png');
>> figure, imshow(bwImg), title('Binary Image')
이미지의 모든 객체의 속성 (예 : 면적, 중심 등)을 측정하려면 regionprops
사용 regionprops
.
>> stats = regionprops(bwImg, 'Area', 'Centroid');
stats
는 이미지의 모든 객체에 대한 구조체를 포함하는 구조체 배열입니다. 객체의 측정 된 속성에 액세스하는 것은 간단합니다. 예를 들어, 첫 번째 객체의 영역을 표시하려면 간단히,
>> stats(1).Area
ans =
35
원본 이미지에 오버레이하여 개체 중심을 시각화합니다.
>> figure, imshow(bwImg), title('Binary Image With Centroids Overlaid')
>> hold on
>> for i = 1:size(stats)
scatter(stats(i).Centroid(1), stats(i).Centroid(2), 'filled');
end