关于图像:在Matlab中计算边缘像素的数量

Counting number of edge pixels in matlab

我想计算给定图像中边缘像素的数量。我通过对图像使用白色Canny运算符获得的图像的白色像素进行计数来进行尝试。

1
2
3
4
5
6
7
I = rgb2gray(imread('replay1.jpg'));
bw = edge(I,'canny');
numberOfBins = 256;
[r, cl, x] = size(bw);
[pixelCount, grayLevels] = imhist(bw);
c = sum(pixelCount(pixelCount==255));
disp(c*100/(r*cl));

问题:

1。但这以某种方式对所有图像给出了相同的答案,这表明我做错了。如何在Matlab中查找图像的边缘像素数?

2。我还可以对图像的YCbCr格式使用canny运算符吗?我尝试这样做,但这给了我错误。

enter


部分1

使用此选项-count_edge_pixels = nnz(bw)这是一种非常有效的方法,可以计算在这种情况下为边缘像素的true(1)值,因此可以计算从edge计算的边缘/白色像素的数量。

PART 2

您可以分别在Y,Cb,Cr的每个上使用edge,或者仅在亮度部分使用Y进行边缘检测。使用它从RGB图像中获取YCbCr。

假设您想获取图像亮度图上的边缘信息,请执行以下操作-

1
2
3
YCBCR = rgb2ycbcr(imread('replay1.jpg'));
luminance_map = YCBCR(:,:,1);
bw = edge(luminance_map,'canny');

希望这有意义并且对您有用!


pixelCount(2)将在此处提供边缘像素的数量。正如@Divakar所提到的,nnz(bw)也将按预期工作。

1
2
3
4
5
6
I = rgb2gray(imread('test.jpg'));
bw = edge(I,'canny');
numberOfBins = 256;
[r, cl, x] = size(bw);
[pixelCount, grayLevels] = imhist(bw);
count = pixelCount(2);  // <- here, or use"count = nnz(bw)"

要检测YCbCr图像上的Canny边缘,可以使用edgecolor.m


这也是计算边缘像素数量的有效方法。

1
count =length(find(BW(:)==1));