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

求各彩色部分的像素点个数。以及所占比例。... 求各彩色部分的像素点个数。以及所占比例。 展开
 我来答
tianxiawulang
推荐于2017-09-14 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2331万
展开全部

之前回答过相关的问题(编号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])

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式