MATLAB求像素点个数 求完整代码。

求各彩色部分的像素点个数。以及所占比例。

之前回答过相关的问题(编号1432290413411891419),当时由于疏忽,代码存在一点小问题,在这里更正。

 

上一版本的问题在于,调色板虽然除去了黑白二色,图像数据A仍然是按原调色板索引的。
修改的几种思路:
1,按新的调色板,对图像数据进行重新映射,把黑白色映射为相近颜色;
2,在调色板中去掉黑白二色的同时,对统计结果也进行调整;
3,不修改调色板和数据,只在显示结果时剔除该两种颜色。
这里采用第2种做法。

 

其实深究起来,还涉及到一个问题:统计各颜色所占比例时,总数中是否包括黑色白色?
暂且按照忽略这两种颜色的方式考虑,这样各颜色的比例合计为100%,但总像素数量与图像不符(缺少黑色和白色的像素)。

 

参考代码:

% 读入图像数据并转换为索引色
X=imread('1.png');
[A,map]=rgb2ind(X,16);

% 统计各种颜色的像素数量
s=arrayfun(@(i)sum(A(:)==i),0:length(map)-1);

% 过滤黑色和白色
inx = ~any(map-repmat([0 0 0],length(map),1),2) | ...
    ~any(map-repmat([1 1 1],length(map),1),2);
map(inx,:)=[];
s(inx) = [];

% 在图中显示各像素的数量及占比
clf
hold on
for i=1:length(s)
    plot(0.1,i,'s','markerface',map(i,:),'markeredge','k','markers',30)
    text(0.4,i,sprintf('%-16i',s(i)),'fontsize',18)
    text(0.8,i,sprintf('%4.1f%%',s(i)/sum(s)*100),'fontsize',18)
end
set(gcf,'color','w');
axis off
xlim([0 1])

温馨提示:答案为网友推荐,仅供参考
相似回答