1

我想计算给定图像中边缘像素的数量。我通过在图像上使用 Canny 运算符计算得到的图像的白色像素来尝试它。

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 运算符吗?我试过这样做,但它给了我错误。

在此处输入图像描述

4

3 回答 3

1

第1部分

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

第2部分

您可以edge分别使用 Y、Cb、Cr 中的每一个,也可以仅使用 Y 对亮度部分进行边缘检测。使用从 RGB 图像中获取 YCbCr。

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

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

希望这是有道理的,对你有用!

于 2014-03-16T18:19:34.793 回答
1

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

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,您可以使用edgecolor.m.

于 2014-03-16T18:13:24.740 回答
0

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

count =length(find(BW(:)==1));
于 2015-02-20T04:36:28.360 回答