在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中计算边缘像素的数量的主要内容,如果未能解决你的问题,请参考以下文章