Counting number of edge pixels in matlab
我想计算给定图像中边缘像素的数量。我通过对图像使用白色Canny运算符获得的图像的白色像素进行计数来进行尝试。
1 2 3 4 5 6 7
| 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
使用此选项-count_edge_pixels = nnz(bw)这是一种非常有效的方法,可以计算在这种情况下为边缘像素的true(1)值,因此可以计算从edge计算的边缘/白色像素的数量。
PART 2
您可以分别在Y,Cb,Cr的每个上使用edge,或者仅在亮度部分使用Y进行边缘检测。使用它从RGB图像中获取YCbCr。
假设您想获取图像亮度图上的边缘信息,请执行以下操作-
1 2 3
| YCBCR = rgb2ycbcr (imread('replay1.jpg'));
luminance_map = YCBCR (:,:, 1);
bw = edge (luminance_map, 'canny'); |
希望这有意义并且对您有用!
-
您能解释第二点吗?我在图像上工作不多,使用Y for edge detection...并没有得到任何结果,但是nnz()似乎为灰度图像给出了正确的结果。
-
您无需进行所有这些直方图计算。只需从edge获取bw并按照代码中所述使用nnz。
-
是的,我明白了。我直接使用了nnz。谢谢您的解释。这很清楚。
pixelCount(2)将在此处提供边缘像素的数量。正如@Divakar所提到的,nnz(bw)也将按预期工作。
1 2 3 4 5 6
| 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。
-
是的,我不知道如何,它返回的答案与nnz()相同。非常感谢你的帮助。现在我不确定该接受谁的答案。
-
@OptimusPrime只要他们帮助了您,接受哪个都没关系。投票已经是一种接受。 :P
-
是的,我接受Divakar的回答,因为它对两个部分都有答案,并且第一个方法更好。但是,也非常感谢您。 :)
这也是计算边缘像素数量的有效方法。