MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第3章 その32【微分フィルタ⑧】
を書き直したもの。
Sobelフィルタの実験。
今回はMATLABで実施。
Sobelフィルタ【再掲】
今回からSobelフィルタの実験開始。
まずはMATLABから。
Sobelフィルタと実験手順を再掲しておこう。
Sobelフィルタ
\(
K_{sbl}=
\begin{bmatrix}
1 \\
2 \\
1 \\
\end{bmatrix}
\begin{bmatrix}
-1 & 0 & 1
\end{bmatrix}=
\begin{bmatrix}
-1 & 0 & 1 \\
-2 & 0 & 2 \\
-1 & 0 & 1 \\
\end{bmatrix}
\)
実験手順
- 画像の読み込み
- ガウシアンフィルタ用のカーネル用意
- Sobelフィルタ用のカーネル用意
- SDTVグレースケール化実施
- ガウシアンフィルタ実施
- Sobelフィルタ実施
- 各Sobelフィルタの結果の合成
- 画像の書き出し
MATLABコード
MATLABコードはこうなる。
convolution2d.m
function out = convolution2d(img, kernel)
[m, n] = size(kernel); % カーネルサイズ取得
% カーネル中心からみた幅
dy = int64(fix((m-1)/2)); % カーネル上下幅
dx = int64(fix((n-1)/2)); % カーネル左右幅
[h, w] = size(img); % イメージサイズ
out = zeros(h, w); % 出力用イメージ
% 畳み込み
for y = dy+1:(h - dy)
for x = dx+1:(w-dx)
out(y, x) = sum( sum( double(img(y-dy:y+dy, x-dx:x+dx)).*kernel ) );
%imgTmp = double(img(y-dy:y+dy, x-dx:x+dx));
%out(y, x) = imgTmp(:)'*kernel(:);
end
end
end
sobel_test.m
function sobel_test()
% 入力画像の読み込み
img = imread('dog.jpg');
r = img(:,:,1);
g = img(:,:,2);
b = img(:,:,3);
% ガウシアンフィルタ用のkernel
kernel_gauss = [ 1/16 2/16 1/16; ...
2/16 4/16 2/16; ...
1/16 2/16 1/16];
% Sobelフィルタ用のKernel
kernel_sx = [-1 0 1;...
-2 0 2;...
-1 0 1];
kernel_sy = kernel_sx';
% SDTVグレースケール
gray_sdtv = [0.2990 * r + 0.5870 * g + 0.1140 * b ];
% ガウシアンフィルタ
img_g = convolution2d(gray_sdtv, kernel_gauss);
% Sobelフィルタ
img_sx = convolution2d(img_g, kernel_sx);
img_sy = convolution2d(img_g, kernel_sy);
imwrite(uint8(fix(abs(img_sx))),'dog_sx.jpg');
imwrite(uint8(fix(abs(img_sy))),'dog_sy.jpg');
% 合成
img_s = sqrt( img_sx.^2 + img_sy.^2 );
imwrite(uint8(fix(img_s)),'dog_s.jpg');
end
処理結果
そして処理結果。
考察
前回のSobelフィルタの結果と一緒であり、
期待通りの動作をしている。
と言いたいところだが、
実は、前回見せたSobelフィルタはMATLABで実施したものなので、一緒であることは当たり前だったりする。
さすがに一個一個手計算するわけにもいかず、MATLABを使うしかなかった・・・。
まずはMATLABでの結果が正しいものとして、他の環境、他の言語と比較していくこととする。
まとめ
- MATLABでSobelフィルタを実施。
- 想定通りの結果が得られた。
- というより、前回までの結果が実はMATLABで実施したものだった。
- 他の環境、言語でも同様の結果が得られるかが確認ポイントになる。
MATLAB、Python、Scilab、Julia比較ページはこちら
コメント