J'ai une vidéo et j'ai créé un masque Sobel sur MATLAB. Maintenant, je dois appliquer ce masque Sobel sur chaque image de la vidéo en lisant chaque image à travers for
boucle. Le processus est quelque chose comme:Les cadres de type double doivent être de l'ordre de 0 à 1: MATLAB
- Étape 1: Cadre de lecture.
- étape 2: Conversion en échelle de gris en utilisant
rgb2gray
. - Étape 3: Conversion en double.
Ici, après l'application du masque lorsque je tente d'écrire le cadre sur le fichier video.avi
résultant, je reçois l'erreur suivante:
"Frames of type
double
must be in the range of 0 to 1"
Quel est le problème avec mon code? Le code que j'ai écrit est présenté ci-dessous:
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);
Merci pour votre aide, votre suggestion de 'mat2gray' travaillé. mais je voudrais comprendre le concept de toutes ces choses, donc si vous pouvez me donner un peu de temps, j'aimerais discuter avec vous. –
Bien sûr, je serais heureux de. Merci d'avoir accepté ma réponse. Je soupçonne que vous l'avez préféré sur @ Rayryeng parce que c'était court et est allé droit au but (c.-à-d. «Réglé le problème»), ce qui était mon intention de le faire; Cependant Rayryeng vous a fourni une analyse très utile des problèmes et des concepts impliqués dans votre tâche; vous pourriez au moins reconnaître son effort en valorisant sa contribution et en répandant un peu d'amour (c'est-à-dire la réputation de récompense :)) Toutes les informations de base dont vous avez besoin pour comprendre les concepts impliqués sont bien présentées. (rayon: désolé, ne voulait pas voler: p) –
non non je ne voulais pas décevoir ou blesser @rayryeng.sans doute ses suggestions sont super mais ce que j'ai ressenti pour moi, ils étaient assez difficiles à comprendre même si j'ai eu une idée de son code (mais je ne comprenais pas tout), et c'était mon problème parce que je ne suis pas bon le traitement d'image encore, donc peut-être c'est la raison pour laquelle je ne pouvais pas comprendre son code. et votre suggestion était courte, donc je l'ai juste mis dans mon code, c'est pourquoi j'ai demandé d'effacer mes concepts à ce sujet. –