得到黑斑的百分比

1次查看(最近30天)
Chathurika Sandamali
Chathurika Sandamali 2021年8月8日
我要测量棍子上补丁的百分比。我已经找到了补丁,但是我找不到选择了多少补丁(红色斑)。
下面是我的代码。请帮忙找到计数。
Img = imread (“图像\ IMG_5058.jpg”);
Gimg = rgb2gray (Img);
图(1);imshow (Gimg);
图(2);imshow (Img);
%灰点小于95
BW = Gimg < 95;
找到所选点的加权质心,并将其与原始图像绘制在一起
rp = regionprops (BW, Gimg“WeightedCentroid”);
% disp (rp);
n =元素个数(rp);
disp (n);
j = 1: n
位置(j, 1) = (j) .WeightedCentroid卢比(1);
% disp(位置(j, 1));
位置(j, 2) = rp (j) .WeightedCentroid (2);
% disp(位置(j, 2));
结束
我= 1:n - 1
如果(位置(i + 1, - 1) -安置(我,1)< 5 | |(位置(i + 1, 2) -安置(我,2)< 5
位置(i + 1) = 1/2 *(位置(我,1)+位置(i + 1, - 1));
位置(i + 1、2)= 1/2 *(位置(我,2)+位置(i + 1, 2));
位置(我,1)= 0;位置(我,2)= 0;
结束
结束
[m, n] =大小(位置);
% fprintf('%d - %d\n', m,n);
图(3);imshow (Img);轴图像;持有
水汽= 0;
i = 1: m
j = 1: n - 1
arr(:, j) = plot(Position(i,j),Position(i,j+1)),的r *
%的阴谋(x (idx), y (idx),“r”,“线宽”,3)
%显示(arr);
结束
结束
% fprintf('%d - %d\n', m,n);
x = 1:位置
流(“% d \ n”,位置(:,x));
水汽=水汽+ 1;
流('补丁数量= %d\n'、水汽);
结束
sizeP =长度(位置);
%流(% d \ n,位置);
位置(所有(位置= = 0,2):)= [];
显示(位置);
%流(“% f \ n”,位置);
% Position = Position*2;
流(“数= % d \ n”、水汽);
流(“% d \ n”, pastCount);

接受的答案

图像分析
图像分析 2021年8月15日
试试这个:
clc;%清除命令窗口。
关闭所有%关闭所有数据(imtool.除外)
清晰;删除所有已存在的变量。或者clearvars,如果你想的话。
工作空间;%确保显示工作区面板。
格式长g
格式紧凑的
字形大小= 15;
baseFileName =“IMG_5058.JPG”
fullFileName = fullfile (“图片”, baseFileName);
Img = imread (fullFileName);
Gimg = rgb2gray (Img);
图(1);imshow (Gimg);
图(2);imshow (Img);
%灰点小于95
BW = Gimg < 95;
找到所选点的加权质心,并将其与原始图像绘制在一起
rp = regionprops (BW, Gimg“WeightedCentroid”);
% disp (rp);
n =元素个数(rp);
disp (n);
j = 1: n
位置(j, 1) = (j) .WeightedCentroid卢比(1);
% disp(位置(j, 1));
位置(j, 2) = rp (j) .WeightedCentroid (2);
% disp(位置(j, 2));
结束
我= 1:n - 1
如果(位置(i + 1, - 1) -安置(我,1)< 5 | |(位置(i + 1, 2) -安置(我,2)< 5
位置(i + 1) = 1/2 *(位置(我,1)+位置(i + 1, - 1));
位置(i + 1、2)= 1/2 *(位置(我,2)+位置(i + 1, 2));
位置(我,1)= 0;位置(我,2)= 0;
结束
结束
[m, n] =大小(位置);
% fprintf('%d - %d\n', m,n);
图(3);imshow (Img);轴图像;持有
水汽= 0;
spotCount = 0;
i = 1: m
j = 1: n - 1
arr(:, j) = plot(Position(i,j),Position(i,j+1)),的r *);
%的阴谋(x (idx), y (idx),“r”,“线宽”,3)
%显示(arr);
spotCount = spotCount + 1;
结束
结束
% fprintf('%d - %d\n', m,n);
x = 1:位置
流(“% d \ n”,位置(:,x));
水汽=水汽+ 1;
流('补丁数量= %d\n'、水汽);
结束
sizeP =长度(位置);
%流(% d \ n,位置);
位置(所有(位置= = 0,2):)= [];
显示(位置);
%流(“% f \ n”,位置);
% Position = Position*2;
流('现货数量= %d\n', spotCount);
流(“水汽= % d \ n”、水汽);
你会得到:
现货数量= 3089
水汽= 0
7评论
Chathurika Sandamali
Chathurika Sandamali 2021年8月15日
我这么做。谢谢你! @Image分析师

登录评论。

答案(1)

darova
darova 2021年8月8日
使用图像的第一个矩阵(红色通道)
A0 = imread (“image.png”);
A1 = ~ im2bw (A0, 0.8);%选择操纵杆
A2 = a0 (:,: 1) > 210;%选择红点和背景
R = a1 & a2;%红点
P =总和(R(:)) /笔(A1 (:))%的比例
P = 0.1199
A00 = rgb2gray (A0);
imshow (A0)
imshow(右)
4评论
图像分析
图像分析 2021年8月15日
正确的。这张图片上没有红点。darova的代码是为你的图像有红色斑点在他们(实际上烧进和部分的图像),就像在你的原始帖子。这些斑点是由您调用plot()在点上画一个红点造成的。因此,要计算代码中红色点的数量,只需计算调用plot()的次数。

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!