clear all
clc
img = imread('TestImage.jpg');
frame_size = size(img);
allpixels = reshape(img, frame_size(1)*frame_size(2), frame_size(3))
[row,col] = size(allpixels);
totalPixels = 0;
count = 0;
white = 0;
black = 0;
red = 0;
green = 0;
blue = 0;
grey = 0;
purplepink = 0;
yelloworange = 0;
for row = 1:row
count = 0;
for col = 1:col
if count == 0
R = allpixels(row,col);
count = count + 1;
elseif count == 1
G = allpixels(row,col);
count = count + 1;
elseif count == 2
B = allpixels(row,col);
count = count + 1;
end
totalPixels = totalPixels + 1;
end
if R > 230 && G > 230 && B > 230
white = white + 1;
elseif R < 70 && G < 70 && B < 70
black = black + 1;
elseif abs(R - G) <= 5 && abs(G - B) <= 5 && abs(R - B) <= 5
grey = grey + 1;
elseif R > B && R > G
red = red + 1;
elseif G > B && G >= R
green = green + 1;
elseif B >= R && B >= G
blue = blue + 1;
end
end
totalPixels = totalPixels/3;
totalPixels
white
black
grey
red
green
blue
white + black + grey + red + green + blue
PercentOfWhite = (white/totalPixels)* 100
A=PercentOfWhite;
PercentOfBlack = (black/totalPixels) * 100
B=PercentOfBlack;
PercentOfGrey = (grey/totalPixels)* 100
C=PercentOfGrey;
PercentOfRed = (red/totalPixels)* 100
D=PercentOfRed;
PercentOfGreen = (green/totalPixels) * 100
E=PercentOfGreen;
PercentOfBlue = (blue/totalPixels) * 100
F=PercentOfBlue;
[x,y]=meshgrid(1:15,1:15);
tri = delaunay(x,y);
z= peaks(15);
trisurf(tri,x,y,z)
上面的代码显示一个 3D 图形。但是,它不显示任何有用的数据。例如,我插入了一个名为TestImage.jpg的图像。它是80%的红色,3D图表出现了。然后我尝试了另一张 80% 蓝色的图像,图表出现了,看起来就像我之前测试的图像一样!我得出的结论是,我的代码没有读取任何图像,它只是随机显示一个没有真实数据结果的 3D。关于如何修复我的代码以显示实际读取我的图像并显示有用数据的 3D 图形的任何建议
我测试了您的代码,看起来您的脚本的最后 4 行没有使用上面的任何变量。这意味着在最后 4 行代码之前发生的任何事情对 3D 图形都无关紧要,因为它是分开的。
如果将最后 4 行替换为以下代码,将出现一个图表并显示表示颜色百分比的条形图:
names = categorical({'PercentOfWhite' 'PercentOfBlack' 'PercentOfGrey' 'PercentOfRed' 'PercentOfGreen' 'PercentOfBlue'});
bar(names,[PercentOfWhite PercentOfBlack PercentOfGrey PercentOfRed PercentOfGreen PercentOfBlue]);
希望我能帮上忙。