【问题标题】:Counting number of edge pixels in matlab在matlab中计算边缘像素的数量
【发布时间】:2014-03-16 18:10:44
【问题描述】:

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

【问题讨论】:

  • @herohuyongtao 对不起..编辑了代码,但这总是显示 0。

标签: image matlab pixels canny-operator


【解决方案1】:

第 1 部分

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

第 2 部分

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

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

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

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

【讨论】:

  • 能否解释一下第二点。我在图像上工作不多,使用Y for edge detection...,我没有从中得到任何东西,但是nnz() 似乎为灰度图像提供了正确的结果。
  • 您不需要进行所有这些直方图计算。只需从edge 获取bw 并按照代码中的说明使用nnz
  • 是的,我明白了..我直接使用了nnz..感谢您的解释。这很清楚。
【解决方案2】:

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 图像上的canny 边缘,您可以使用edgecolor.m

【讨论】:

  • @OptimusPrime 更新了答案。
  • 这也为所有图像返回 0。 :(
  • 很奇怪,它在我的测试中返回了一个很大的数字。你测试的是什么图片?
  • 我会附上我的问题。您还可以显示您测试的代码吗?我在 2-3 张图片上对其进行了测试。
  • @OptimusPrime 我只是测试你的图像,返回10130
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-14
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多