# Error with matrix dimensions

4 ビュー (過去 30 日間)
Srdjan 2014 年 11 月 18 日
コメント済み: Srdjan 2014 年 11 月 18 日
Hi, I'm making a code for scene cut detection, but I always get an error for line 14: matrix dimensions must agree... How do I fix this? Thank you.
THRESH = 0.5;
numFrames = video.NumberOfFrames;
prevHist = zeros(256*3,1);
diffHist= zeros(numFrames,1);
cutInd = 1;
for i = 1 : numFrames
currHistR = imhist(currFrame(:, :, 1));
currHistG = imhist(currFrame(:, :, 2));
currHistB = imhist(currFrame(:, :, 3));
currHist = [currHistR currHistG currHistB];
whos prevHist currHist;
diffHist(i) = sqrt(sum((currHist - prevHist).^2));
if (diffHist(i) > THRESH)
cutFrames(:, :, :, cutInd) = currFrame(:, :, :);
cutInd = cutInd + 1;
end
prevHist = currHist;
end
stem(diffHist);
figure;
montage(cutFrames);
##### 4 件のコメント2 件の古いコメントを表示2 件の古いコメントを非表示
Andrew Reibold 2014 年 11 月 18 日

You will need to make them both the same size to use the subtraction operation in line 14 on them.
What code are you using to make the 768x1 into a 256x3? (What code are you using giving you the A(I)=B error. That should be easy to troubleshoot hopefully) I assume you are just trying to split it into 3 parts?
There are more efficient ways to make a new matrix, but have you tried something like this?
prevHist2(:,1) = prevHist(1:256)
prevHist2(:,2) = prevHist(257:512)
prevHist2(:,3) = prevHist(513:768)
and then using the new version of prevHist that is now rearranged?
Andrew Reibold 2014 年 11 月 18 日
Nevermind, I see you have a solution! Best wishes

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

### 採用された回答

MA 2014 年 11 月 18 日
you have two mistake:
prevHist = zeros(256*3,1)
and
diffHist(i) = sqrt(sum((currHist - prevHist).^2))
clear all
close all
clc;
THRESH = 0.5;
numFrames = video.NumberOfFrames;
prevHist = zeros(256,3);
diffHist= zeros(numFrames,1);
cutInd = 1;
for i = 1 : numFrames
currHistR = imhist(currFrame(:, :, 1));
currHistG = imhist(currFrame(:, :, 2));
currHistB = imhist(currFrame(:, :, 3));
currHist = [currHistR currHistG currHistB];
whos prevHist currHist;
diffHist(i) = sqrt(sum((currHist(i) - prevHist(i)).^2));
if (diffHist(i) > THRESH)
cutFrames(:, :, :, cutInd) = currFrame(:, :, :);
cutInd = cutInd + 1;
end
prevHist = currHist;
end
stem(diffHist);
figure;
montage(cutFrames);
##### 1 件のコメント-1 件の古いコメントを表示-1 件の古いコメントを非表示
Srdjan 2014 年 11 月 18 日
Thx mate, it works fine. :)

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

### その他の回答 (2 件)

MA 2014 年 11 月 18 日
you have two mistake:
prevHist = zeros(256*3,1)
and
diffHist(i) = sqrt(sum((currHist - prevHist).^2))
clear all
close all
clc;
THRESH = 0.5;
numFrames = video.NumberOfFrames;
prevHist = zeros(256,3);
diffHist= zeros(numFrames,1);
cutInd = 1;
for i = 1 : numFrames
currHistR = imhist(currFrame(:, :, 1));
currHistG = imhist(currFrame(:, :, 2));
currHistB = imhist(currFrame(:, :, 3));
currHist = [currHistR currHistG currHistB];
whos prevHist currHist;
diffHist(i) = sqrt(sum((currHist(i) - prevHist(i)).^2));
if (diffHist(i) > THRESH)
cutFrames(:, :, :, cutInd) = currFrame(:, :, :);
cutInd = cutInd + 1;
end
prevHist = currHist;
end
stem(diffHist);
figure;
montage(cutFrames);
##### 0 件のコメント-2 件の古いコメントを表示-2 件の古いコメントを非表示

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

Kevin Claytor 2014 年 11 月 18 日
Let's take a look at the definition of;
diffHist= zeros(numFrames,1);
This is a [numFrames x 1] size array. Into this you're trying to put;
sqrt(sum((currHist - prevHist).^2));
So, first in regards to the sizes, you can only subtract them if they're the same size;
>> size(currHist)
>> 256x3
>> size(prevHist)
>> 768x1
Which you seem to have resolved in your comments. But now you're trying to put a 256x3 array (sqrt(...)) into a 1x1 slot (diffHist(i)). Either you want the entire array;
diffHist = zeros(256, 3, numFrames);
diffHist(:, :, i) = sqrt(...)
Or you just want some representative value of the difference histogram;
temp_dist_hist = sqrt(...);
representative_value = sum(temp_dist_hist(:)); % Just an example, depends on what you're trying to do
diffHist(i) = representative_value;
Hope, this helps.
##### 1 件のコメント-1 件の古いコメントを表示-1 件の古いコメントを非表示
Srdjan 2014 年 11 月 18 日
Your example helped a lot, thank you.

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

### カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

### Community Treasure Hunt

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

Start Hunting!

Translated by