私はビデオを持っており、MATLAB上にSobelマスクを作成しました。今度は、各フレームをfor
ループで読み込んで、ビデオの各フレームにそのSobelマスクを適用する必要があります。プロセスは次のようなものです:double型のフレームは、0〜1の範囲内でなければなりません。MATLAB
- ステップ1:読み込みフレーム。
- ステップ2:
rgb2gray
を使用してグレースケールに変換します。 - 手順3:2倍に変換します。ここで
、私は結果video.avi
ファイルにフレームを書き込みしようとすると、マスクを適用した後、私は次のエラーを取得する:
"Frames of type
double
must be in the range of 0 to 1"
私のコードが間違っていますか?私が書いたコードを以下に示します。
vid = VideoReader('me.mp4');
frames = read(vid);
total = get(vid, 'NumberOfFrames');
write = VideoWriter('me.avi');
open(write);
mask1 = [-1 -2 -1; 0 0 0; 1 2 1]; % Horizontal mask
mask2 = [-1 0 1; -2 0 2; -1 0 1]; %Vertical Mask
for k = 1 : 125
image = frames(:,:,:,k);
obj = image;
obj1 = rgb2gray(obj);
obj2=double(obj1);
for row = 2 : size(obj2, 1) - 1
for col = 2 : size(obj2, 2) - 1
c1 = obj2(row - 1, col - 1) * mask1(1 ,1);
c2 = obj2(row - 1, col) * mask1(1 ,2);
c3 = obj2(row - 1, col + 1) * mask1(1 ,3);
c4 = obj2(row, col - 1)*mask1(2, 1);
c5 = obj2(row, col)*mask1(2, 2);
c6 = obj2(row, col + 1)*mask1(2, 3);
c7 = obj2(row + 1, col - 1)*mask1(3,1);
c8 = obj2(row + 1, col)*mask1(3,2);
c9 = obj2(row + 1, col + 1)*mask1(3,3);
c11 = obj2(row - 1, col - 1)*mask2(1 , 1);
c22 = obj2(row, col - 1)*mask2(2, 1);
c33 = obj2(row + 1, col - 1)*mask2(3, 1);
c44 = obj2(row -1, col)*mask2(1, 2);
c55 = obj2(row, col)*mask2(2 , 2);
c66 = obj2(row +1, col)*mask2(2 , 3);
c77 = obj2(row - 1, col + 1)*mask2(1 , 3);
c88 = obj2(row, col +1)*mask2(2 , 3);
c99 = obj2(row + 1, col + 1)*mask2(3 , 3);
result = c1 + c2 + c3 +c4 +c5+ c6+ c7+ c8 +c9;
result2 = c11 + c22 + c33 + c44 + c55 + c66 + c77 + c88 + c99;
%result = double(result);
%result2 = double(result2);
rim1(row, col) = ((result^2+result2^2) *1/2);
rim2(row, col) = atan(result/result2);
end
end
writeVideo(write, rim2); %This line has the problem with rim2 as rim2 is the frame i'm trying to write on the video file.
end
close(write);
助けていただきありがとうございます。あなたの提案した 'mat2gray'が働きました。しかし、私はこれらすべての事柄のコンセプトを理解したいと思います。あなたに少し時間を与えることができれば、私はあなたとチャットをしたいと思います。 –
確かに、私はうれしいです。私の答えを受け入れてくれてありがとう。私はあなたが@ rayryengの上にそれを優先したと思う。それは短くて、それを寄付するという私の意図であった点(すなわち「問題を解決した」)にまっすぐに行ったからだ。 rayryengはあなたの仕事に関わる問題や概念の驚くほど有益な内訳をあなたに与えてくれました。彼の貢献をあきらめ、愛を広げて(つまり賞の評判:))、あなたが関わっている概念を理解するために必要なすべての背景情報がうまくレイアウトされています。 (レイ:申し訳ありませんが、盗むことを意味しませんでした) –
いいえ私は@rayryengを失望させたり傷つけたりするつもりはありませんでした。彼の提案はすごいですが、私の気持ちは分かりましたが、彼のコードについていくつかのアイデアがありましたが(しかしすべてを理解できませんでしたが)理解するのはかなり難しかったです。まだ画像処理が行われているので、私は彼のコードを理解できませんでした。あなたの提案は短かったので私はちょうどそれを私のコードの中に入れました、それが私がそのことに関する私の考えをクリアするように頼んだ理由です。 –