是否有可能找到圆内某个区域的黑色像素化区域?换句话说,我想找到圆圈内RGB 0,0,0(黑色像素)的像素数(区域)。我不希望圆圈内的白色像素(1,1,1)的区域。如果有帮助,我也有圆的半径。这是图像:
以下是代码:
BW2= H(:,:) <0.45 ;%& V(:,:)<0.1;
aa=strel('disk',5);
closeBW = imclose(BW2,aa);
figure, imshow(closeBW)
imshow(closeBW)
viscircles([MYY1 MYX1], round(MYR2/2))
MYY1,MYX2和其他值由我的程序计算。如何在我的圆圈中找到黑色像素化的区域?
答案 0 :(得分:1)
这是一个想法:
1)计算原始图像中黑色像素的总数(让我们称之为A
)。
2)复制该图像(让我们称之为B
)并用白色替换圆圈内的所有像素。为此,请创建二进制掩码。 (见下文)
3)计算该图像中黑色像素的总数(即B
)。
4)减去两个值。这应该会给你圈内黑色像素的数量。
示例代码:我使用了计算机上的虚拟图像,并使用createMask
中的imellipse
方法创建了逻辑蒙版。这似乎很复杂,但在你的情况下,因为你有圆心的中心位置和半径,你可以像我一样直接创建你的面具,或者查看this问题/答案。
创建蒙版后,使用find
获取蒙版白色像素的线性索引(即全部像素),用白色像素替换原始图像圆圈中的像素,用于计算黑色像素的差异。
clc;clear;close all
A = im2bw(imread('TestCircle.png'));
imshow(A)
Center = [160 120];
Radius = 60;
%// In your case:
% Center = [MYY1 MYX1];
% Radius = round(MYR2/2);
%// Get sum in original image
TotalBlack_A = sum(sum(~A))
e = imellipse(gca, [Center(1) Center(2) Radius Radius]);
%// Create the mask
ROI = createMask(e);
%// Find white pixels
white_id = find(ROI);
%// Duplicate original image
B = A;
%// Replace only those pixels in the ROI with white
B(white_id) = 1;
%// Get new sum
NewBlack_B = sum(sum(~B))
%// Result!
BlackInRoi = TotalBlack_A - NewBlack_B
在这种情况下,我得到了这个输出:
TotalBlack_A =
158852
NewBlack_B =
156799
BlackInRoi =
2053
对于此输入图像: