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

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

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 13 Dec 2021
Edited: Atsushi Ueno on 14 Dec 2021
その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 Comment
Noruji Muto
Noruji Muto on 16 Dec 2021
詳細にご回答いただきましてありがとうございます。
ご教示頂いた方法を試してみようと思います。

Sign in to comment.

More Answers (0)

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!