Brace indexing into the result of a function call is not supported

29 vues (au cours des 30 derniers jours)
Bryce
Bryce le 2 Jan 2024
Commenté : DGM le 2 Jan 2024
Hello I was attempting to run a code I had. The code is below:
%focus stacking function using Laplacian pyramid
function resultImage = focusStack(imageStack)
numImages = numel(imageStack);
%Convert images ti double for processing
for i = 1:numImages
imageStack{i} = im2double(imageStack{i});
end
%Initialize Laplacian pyrimid for each image
laplacianPyramid = cell(1 , numImages);
for i = 1:numImages
laplacianPyramid{i} = laplacianPyramid(imageStack{i});
end
%combine Laplacian pyramid to create the final result
blendedPyramid = blendLaplacianPyramids(laplacianPyramid);
%Reconstruct the final focus-stacked Image
resultImage = reconstructFromPyramid(blendPyramid);
end
% Laplacian pyramid generation for an image
function pyramid = laplacianPyramid(image)
levels = 6; %Number of pyramid levels (adjust as needed)
pyramid = cell(1, levels);
pyramid{1} = image;
for i = 2:levels
smoothed = imgaussfilt(pyramid{i-1}, 2); %Apply Gausian smoothing
difference = pyramid{i-1} -smoothed; %Compute difference
pyramid{i} = difference;
end
end
%blend the laplacian pyramid to create the final result
function blendedPyramid = blendLaplacianPyramids(pyramids)
numLevels = numel(pyramid{1});
blendedPyramid = cell(1, numLevels);
for level = 1:numLevels
blendedLevel = zeros(size(pyramids{1}{level}));
for level = 1:numel(pyramids)
blendedLevel = blendedLevel + pyramid{1}{level};
end
blendedPyramid{level} = blendedLevel;
end
end
%Reconstruct image from blended Laplacian
function resultImage = recontructFromPyramid(pyramid)
numLevels = numel(pyramid);
resultImage = pyramid{numLevels};
for level = numLevel-1:-1:1
expanded = imresize(resultImage, size(pyramid{level}), 'bilinear');
resultImage = expanded + pyramid{level};
end
end
I ran the code above and got the following error:
Error: File: focusStack.m Line:
40 Column: 23
Brace indexing into the result
of a function call is not
supported. Assign the result of
'pyramid' to a variable first,
then brace index into it.
Do you know of a way to resolve this issue.

Réponse acceptée

DGM
DGM le 2 Jan 2024
Modifié(e) : DGM le 2 Jan 2024
Hm. I'm going to guess on this one.
function blendedPyramid = blendLaplacianPyramids(pyramids) % the variable is 'pyramids'
numLevels = numel(pyramid{1}); % but it's singular here
blendedPyramid = cell(1, numLevels);
for level = 1:numLevels
blendedLevel = zeros(size(pyramids{1}{level})); % plural here
for level = 1:numel(pyramids) % plural here
blendedLevel = blendedLevel + pyramid{1}{level}; % singular here
My guess is that 'pyramid' is supposed to be 'pyramids'. Since 'pyramid' isn't a defined variable, it's instead resolving as a function somewhere on your path and causing the admittedly confusing error.
  4 commentaires
Bryce
Bryce le 2 Jan 2024
Thanks again!
DGM
DGM le 2 Jan 2024
no problem

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by