- MATLABのみで実行可能な関数を使用:画像データの種類を考慮したり、自分でフィルタを記述する必要があります
- image processing toolboxが必要な関数を使用:画像やフィルタの種類を選ばず、多くの条件に対応します
画像への平均値化フィルターの適用
조회 수: 36 (최근 30일)
이전 댓글 표시
平均値化フィルタ―を使用して移動平均をとった行列を出したいです
また、その計算の際、nanの数値を移動平均の計算式に入れないようにする方法も教えていただきたいです。
よろしくお願いします。
댓글 수: 0
채택된 답변
Atsushi Ueno
2021년 11월 16일
>nanの数値を移動平均の計算式に入れないようにする方法
演算前にNaNを探して0にしておけば、畳み込みの際に影響を与えない(計算に入れない)事になります。これを行う"nanconv関数"がFile Exchangeにありました。conv2の代わりにnanconvを使いました(NaN値は入れてませんが)
2つの方法を実行してみます
I = imread('peppers.png');
hsize = [1,20]; % 平均化フィルタのサイズ
%% 1:MATLABのみで実行可能な関数を使用
H = ones(hsize(1),hsize(2))/(hsize(1)*hsize(2)); % fspecialのアルゴリズムに基づく平均化フィルタ
R = uint8(nanconv(I(:,:,1),H,'same')); % イメージ(R成分)と平均化フィルタの畳み込み(conv2⇒nanconvに置換)
G = uint8(nanconv(I(:,:,2),H,'same')); % イメージ(G成分)と平均化フィルタの畳み込み(conv2⇒nanconvに置換)
B = uint8(nanconv(I(:,:,3),H,'same')); % イメージ(B成分)と平均化フィルタの畳み込み(conv2⇒nanconvに置換)
C = cat(3,R,G,B);
imshow(C);
%% 2:image processing toolboxが必要な関数を使用
H = fspecial('average',hsize); % 色々なフィルタを名前とサイズ等のパラメータだけで作成できます
C = imfilter(I,H); % やってる事はconv2と同じですが、あらゆる条件に対応可能なすごい関数です
imshow(C);
댓글 수: 3
Atsushi Ueno
2021년 11월 17일
fspecial関数は平均化フィルタを作る関数です。fspecial関数が出力する平均化フィルタの定義はones(hsize)/prod(hsize)なので、要素にNaNが含まれる事はありません。
「もし画像データか平均化フィルタのいずれかにNaNが含まれていても、NaNを0に置き換えれば畳み込み演算に影響を与えない」という事です。
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 オブジェクト解析에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!