计算matlab中边缘像素的数量

时间:2014-03-16 18:10:45

标签: image matlab pixels canny-operator

我想计算给定图像中边缘像素的数量。我通过在图像上使用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运算符吗?我试过这样做,但它给了我错误。

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

第1部分

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

第2部分

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

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

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

希望这有意义,对你有用!

答案 2 :(得分:0)

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

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