"Subscripted assignment dimension mismatch" Error
2 次查看(过去 30 天)
显示 更早的评论
Hello,
I am working on a script that was made a few years ago. I had to make some changes to it, and now I can get it to run on certain images, but not on all. When I change the images in my folder to a new set, I get the error:
Subscripted assignment dimension mismatch.
Error in luminance (line 29)
alc(i,1).rgb(:,:,:) = imread(alcJPG(i).name); %now in format [rows columns RGB=1,2,3]
I have included the relevant portion of the code below. I'm not sure why I am only getting this error on some images and not others. Thank you for the help.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%read in alc and nonalc images and convert to RBG with imread
display ('reading alc and nonalc images');
cd(alc_dir);
alcJPG = dir('*.JPG'); %alcohol images
for i = 1:length(alcJPG)
alc(i,1).rgb(:,:,:) = imread(alcJPG(i).name); %now in format [rows columns RGB=1,2,3]
alc(i).hsv = rgb2hsv(alc(i).rgb); %convert to HSV %%%(Hue, Saturation, Value)
alc(i).ycbcr = rgb2ycbcr(alc(i).rgb); %convert to YCbCr %%%(brightness, two color dif signals- Cb and Cr)
alc(i).lab = RGB2Lab(alc(i).rgb); %convert to Lab %%%(Lightness and color-opponent dimenstions-- a and b)
end
cd(nonalc_dir);
nonalcJPG = dir('*.JPG'); %nonalcohol images
for i = 1:length(nonalcJPG)
nonalc(i,1).rgb(:,:,:) = imread(nonalcJPG(i).name); %now in format [rows columns RGB=1,2,3]
nonalc(i).hsv = rgb2hsv(nonalc(i).rgb); %convert to HSV, V = 3 (value)
nonalc(i).ycbcr = rgb2ycbcr(nonalc(i).rgb); %convert to YCbCr, Y = 1 (luminance)
nonalc(i).lab = RGB2Lab(nonalc(i).rgb); %convert to Lab
end
cd(p);
display ('calculating RGB means');
for i = 1:length(nonalc)
%RGB means
alc(i).meanRintensity = mean(mean(alc(i).rgb(:,:,1),2),1);
alc_meanR(i) = alc(i).meanRintensity;
alc(i).meanGintensity = mean(mean(alc(i).rgb(:,:,2),2),1);
alc_meanG(i) = alc(i).meanGintensity;
alc(i).meanBintensity = mean(mean(alc(i).rgb(:,:,3),2),1);
alc_meanB(i) = alc(i).meanBintensity;
nonalc(i).meanRintensity = mean(mean(nonalc(i).rgb(:,:,1),2),1);
nonalc_meanR(i) = nonalc(i).meanRintensity;
nonalc(i).meanGintensity = mean(mean(nonalc(i).rgb(:,:,2),2),1);
nonalc_meanG(i) = nonalc(i).meanGintensity;
nonalc(i).meanBintensity = mean(mean(nonalc(i).rgb(:,:,3),2),1);
nonalc_meanB(i) = nonalc(i).meanBintensity;
%HSV mean (only store V)
alc(i).meanVintensity = mean(mean(alc(i).hsv(:,:,3),2),1);
alc_meanV(i) = alc(i).meanVintensity;
nonalc(i).meanVintensity = mean(mean(nonalc(i).hsv(:,:,3),2),1);
nonalc_meanV(i) = nonalc(i).meanVintensity;
%YCbCr mean (only store Y)
alc(i).meanYintensity = mean(mean(alc(i).ycbcr(:,:,1),2),1);
alc_meanY(i) = alc(i).meanYintensity;
nonalc(i).meanYintensity = mean(mean(nonalc(i).ycbcr(:,:,1),2),1);
nonalc_meanY(i) = nonalc(i).meanYintensity;
%Lab mean (only store L)
alc(i).meanLintensity = mean(mean(alc(i).lab(:,:,1),2),1);
alc_meanL(i) = alc(i).meanLintensity;
nonalc(i).meanLintensity = mean(mean(nonalc(i).lab(:,:,1),2),1);
nonalc_meanL(i) = nonalc(i).meanLintensity;
end
%to apply SHINE to the image need to replace V with Y to change to HSL -
%but SHINE is only useful if we want to match the luminance in the images,
%not just report it
%therefore, let's create a text output with all of these values in order to
%input to spss
out = fopen([export_dir 'luminance_test_4.25a.txt'], 'wt');
fprintf(out,'img, group, meanR, meanG, meanB, meanV, meanY, meanL\n');
for i = 1:length(alcJPG) %%this should be the # of jpgs in folder
display ('alc out');
if length(alcJPG(i).name(1:4)) == 4 %%AT added: if first 4 letters = 4 letters (always will) then....
%if length(alcJPG(i).name) == 6; %%original was basing if on length of
%filename... changed it to work around this
fprintf(out,'%s, alc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', alcJPG(i).name(:),alc_meanR(i),alc_meanG(i), ...
alc_meanB(i),alc_meanV(i),alc_meanY(i),alc_meanL(i)); %%.name(ratio) here is printing to output the first 2,3,4 letters...WHY?
%%.name(:) prints whole filename
elseif length(alcJPG(i).name) == 7
fprintf(out,'%s, alc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', alcJPG(i).name(1:3),alc_meanR(i),alc_meanG(i), ...
alc_meanB(i),alc_meanV(i),alc_meanY(i),alc_meanL(i));
elseif length(alcJPG(i).name) == 8
fprintf(out,'%s, alc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', alcJPG(i).name(1:4),alc_meanR(i),alc_meanG(i), ...
alc_meanB(i),alc_meanV(i),alc_meanY(i),alc_meanL(i));
end
end
for i = 1:length(nonalcJPG)
display ('nonalc out');
if length(nonalcJPG(i).name) == 6
fprintf(out,'%s, nonalc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', nonalcJPG(i).name(1:2),nonalc_mefclose(out),anR(i),nonalc_meanG(i), ...
nonalc_meanB(i),nonalc_meanV(i),nonalc_meanY(i),nonalc_meanL(i));
elseif length(nonalcJPG(i).name(1:7)) == 7 %%changed ==7 rather than 6 like alc because 6 here has a weird line (mefclose(out))
%elseif length(nonalcJPG(i).name) == 7
fprintf(out,'%s, nonalc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', nonalcJPG(i).name(:),nonalc_meanR(i),nonalc_meanG(i), ...
nonalc_meanB(i),nonalc_meanV(i),nonalc_meanY(i),nonalc_meanL(i));
elseif length(nonalcJPG(i).name) == 8
fprintf(out,'%s, nonalc, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f, %4.4f\n', nonalcJPG(i).name(1:4),nonalc_meanR(i),nonalc_meanG(i), ...
nonalc_meanB(i),nonalc_meanV(i),nonalc_meanY(i),nonalc_meanL(i));
end
end
3 个评论
Walter Roberson
2018-4-25
I posted a follow-up there describing what would need to be done for earlier versions.
回答(1 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Processing Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!