How can I perfom an interpolation?

3 次查看(过去 30 天)
Alber
Alber 2020-4-24
回答: dpb 2020-4-24
Hello, I have a code called codeAlpha, which has a value range of -1 to 1. My buffer is called frameBuffer and it has a size of (height, width, numChannels, framesPerSymbol), where framesPerSymbol is the size of the buffer. This buffer will store the frames of a video.
The ultimate goal of this code is to return a buffer called encodedBuffer which will have encoded images. These images will be obtained by adding frame (original image) + code (temporary interpolated) because the code goes from -1 to 1 and we want this transition to be controlled by N.
This is my code, I am currently having problems with the time dimension and it gives me an error.
codeAlpha = mapped*alpha;
bufferSize = size(frameBuffer,4);
numChannels = size(frameBuffer,3);
time = linspace(-1, 1, N);
frames = cat(4,zeros([size(codeAlpha),numChannels,bufferSize]));
for i = 1:length(time)
frames(:,:,:,i) = codeAlpha.*time(:,:,:,i) + codeAlpha.*(1-time(:,:,:,i))*(-1);
end
for i =1:bufferSize
encodedBuffer = frameBuffer + frames;
end
As an example I have been testing:
imgInicial = ones(2160,3840,3);
imgFinal = ones(2160,3840,3)*11;
frameBuffer = cat(4, imgInicial, imgFinal);
N = 5;
The code has the same dimensions as the images in the buffer.
I hope I have explained clearly, if you need me to explain something else, please let me know. Thank you very much in advance.

回答(1 个)

dpb
dpb 2020-4-24
time = linspace(-1, 1, N);
frames = cat(4,zeros([size(codeAlpha),numChannels,bufferSize]));
for i = 1:length(time)
frames(:,:,:,i) = codeAlpha.*time(:,:,:,i) + codeAlpha.*(1-time(:,:,:,i))*(-1);
...
What you trying to do here?
You've defined time as a vector of 100 points over range -1:1 but then try to reference it by a 4-D vector. That will return the whole thing by dimensions collapsing.
Look at the following minimal example that is small-enough and clean-enough to be able to visualize what's going on as outline...
B=ones(2,3,3,3); % a trivially easy buffer array of three frames
t=linspace(-1,1,size(B,4)); % your weighting time vector sized on B to work in place
for i=1:numel(t),B(:,:,:,i)=B(:,:,:,i)*t(i);end % apply the weight -- other side is obvious
% show resulting B
>> B(:,:,:,1)
ans(:,:,1) =
-1 -1 -1
-1 -1 -1
ans(:,:,2) =
-1 -1 -1
-1 -1 -1
ans(:,:,3) =
-1 -1 -1
-1 -1 -1
>> B(:,:,:,2)
ans(:,:,1) =
0 0 0
0 0 0
ans(:,:,2) =
0 0 0
0 0 0
ans(:,:,3) =
0 0 0
0 0 0
>> B(:,:,:,3)
ans(:,:,1) =
1 1 1
1 1 1
ans(:,:,2) =
1 1 1
1 1 1
ans(:,:,3) =
1 1 1
1 1 1
>>
% Show problem of wrong addressing for the time vector...
>> t(:,:,:,1)
ans =
-1 0 1
>>

类别

Help CenterFile Exchange 中查找有关 Computer Vision with Simulink 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by