MATLABを用いた​動画ファイルのノイズ​除去・シャープ化につ​いて

13 ビュー (過去 30 日間)
Noruji Muto
Noruji Muto 2021 年 12 月 11 日
コメント済み: Kenta 2021 年 12 月 21 日
お世話になります。
撮影した動画のノイズを除去し、シャープ化する方法を調べているのですが、適した方法を見つけることができません。SimlinkではなくMATLABを使用したいと考えています。
これまでに見つけた方法はMATLABではなくSimLinkのものだけでした。↓
ノイズ除去に関しては、画像に対する、SimlinkではなくMATLABを使っての方法があるようですが、私が求めているのは動画に対するものです。↓
MATLABを利用してノイズの除去・シャープ化を行う方法をどなたかご教示いただけないでしょうか?
よろしくお願いいたします。
  3 件のコメント
Noruji Muto
Noruji Muto 2021 年 12 月 12 日
編集済み: Noruji Muto 2021 年 12 月 12 日
ありがとうございます。
ひとまずその3つの手順に分けてみようかと思います。
やりかたを調べてみますね。
Kenta
Kenta 2021 年 12 月 21 日
こんにちは、@Atsushi Ueno さまに整理頂いた手順で、3にあたるところですが、(単眼)超解像と捉えるのであれば、こちらのような深層学習を用いた方法も考えられます。
「シャープ」にするには、エッジフィルターのような方法も考えられますし、目的に応じて選択いただければと思います。

サインインしてコメントする。

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 12 月 13 日
編集済み: Atsushi Ueno 2021 年 12 月 14 日
その1:>MATLABを利用してノイズの除去を行う方法
ごま塩ノイズ - Wikipedia >この種類のノイズの効果的なノイズ除去方法は、メディアンフィルターまたはモルフォロジーフィルターである。 ソルトノイズまたはペッパーノイズのいずれか(両方ではない)を低減するには、逆調和平均フィルターが効果的である。
I = imread('eight.tif');
%% ごま塩ノイズ付加
% I = imnoise(I,'salt & pepper',0.02); % ⇒Image Processing Toolbox要
for index = 1:1000
I(randi(size(I,1)),randi(size(I,2)),:) = 255*(randi(2)-1); % ごま塩ノイズ付加(MATLABでOK)
end
%% 平均化フィルタ
% Kaverage = filter2(fspecial('average',3),Img)/255; % ⇒Image Processing Toolbox要
hsize = [3,3]; H = ones(hsize(1),hsize(2))/(hsize(1)*hsize(2));
Kaverage = uint8(conv2(I,H,'same')); % 平均化フィルタ適用(MATLABでOK)
%% メディアンフィルタ
% Kmedian = medfilt2(I); % ⇒Image Processing Toolbox要
Kmedian = I; % 端っこは元画像のまま(ちょっとインチキ)
for y = 2:size(I,1)-1 % メディアンフィルタ適用(MATLABでOK)
for x = 2:size(I,2)-1
Kmedian(y,x) = median(I(y-1:y+1,x-1:x+1),'all');
end
end
% 左から:ごま塩ノイズ付加画像, 平均化フィルタ適用結果, メディアンフィルタ適用結果
montage({I,Kaverage,Kmedian}, 'Size', [1 3]);
その2:>MATLABを利用してシャープ化を行う方法
I = imread('eight.tif');
%% 平均化(ぼかし)フィルタ
% Kaverage = filter2(fspecial('average',3),Img)/255; % ⇒Image Processing Toolbox要
hsize = [3,3]; H = ones(hsize(1),hsize(2))/(hsize(1)*hsize(2));
Bokasi = uint8(conv2(I,H,'same')); % 平均化フィルタ適用(MATLABでOK)
%% シャープ化フィルタ
S = [0 -1 0; -1 5 -1; 0 -1 0];
Sharp = uint8(conv2(Bokasi,S,'same')); % ぼかし画像にシャープ化フィルタ適用(MATLABでOK)
% 左から:元画像, ぼかし画像, ぼかし画像のシャープ化画像
montage({I,Bokasi,Sharp}, 'Size', [1 3]);
その3:動画ファイルのフレームを1枚ずつ画像処理する方法
上記を参考に、その2のぼかしフィルタ(カラー画像対応版)を適用しました。
hsize = [1,20]; % その2よりも横方向のみ強くぼかす
H = ones(hsize(1),hsize(2))/(hsize(1)*hsize(2)); % 平均化(ぼかし)フィルタ
vidObj = VideoReader('xylophone.mp4'); % ビデオファイルを読み取り
while hasFrame(vidObj) % 次のビデオフレームがあったら
vidFrame = readFrame(vidObj); % 次のビデオフレームを読み取り
R = uint8(conv2(vidFrame(:,:,1),H,'same')); % 平均化フィルタ適用(MATLABでOK)
G = uint8(conv2(vidFrame(:,:,2),H,'same'));
B = uint8(conv2(vidFrame(:,:,3),H,'same'));
vidFrame = cat(3,R,G,B); % RGB別にぼかした画像を元通りにくっ付ける
imshow(vidFrame); % 表示
pause(1/vidObj.FrameRate); % フレームレート分停止する
end
  1 件のコメント
Noruji Muto
Noruji Muto 2021 年 12 月 16 日
詳細にご回答いただきましてありがとうございます。
ご教示頂いた方法を試してみようと思います。

サインインしてコメントする。

その他の回答 (0 件)

製品


リリース

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!