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
元のフィルタリングされていないイメージとし、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
があるとしましょう。たとえば、 imread
を使用して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
は、イメージ内のすべてのオブジェクトの構造体を含むstruct配列です。オブジェクトの測定されたプロパティにアクセスするのは簡単です。たとえば、最初のオブジェクトの領域を表示するには、単純に、
>> 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