在MATLAB中找到黑点区域

时间:2015-07-17 17:58:04

标签: matlab image-processing

是否有可能找到圆内某个区域的黑色像素化区域?换句话说,我想找到圆圈内RGB 0,0,0(黑色像素)的像素数(区域)。我不希望圆圈内的白色像素(1,1,1)的区域。如果有帮助,我也有圆的半径。这是图像:

enter image description here

以下是代码:

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和其他值由我的程序计算。如何在我的圆圈中找到黑色像素化的区域?

1 个答案:

答案 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

对于此输入图像:

enter image description here