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