在matlab中计算边缘像素的数量

Posted

技术标签:

【中文标题】在matlab中计算边缘像素的数量【英文标题】:Counting number of edge pixels in 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。 【参考方案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));

【讨论】:

以上是关于在matlab中计算边缘像素的数量的主要内容,如果未能解决你的问题,请参考以下文章

图像处理基于灰度矩的亚像素边缘检测方法理论及MATLAB实现

Matlab - 如何计算图像像素偏移

如何用matlab计算二值化图中白色区域的像素点个数

图像的亚像素边缘检测 MATLAB代码

基于MATLAB的Sobel边缘检测算法实现

图像边缘检测基于matlab Zernike矩亚像素边缘检测含Matlab源码 1536期