在matlab中准确检测数字图像中的叶子总面积

Accurately detect total area of leaf in digital image in matlab

我已将图像转换为二进制(黑白)。这里是 original image and binary image

这是我写的代码

a=imread('image');
imshow(a);title('original image');
b=imresize(a,[200,250]);
figure,imshow(b);title('resized image');
c=im2bw(b);
figure,imshow(c); title(['Number of white pixels: ' int2str(nnz(c))]);
at=int2str(nnz(c));
disp(at)

我数了数白色像素以求出叶子的总面积。但是由于叶子的褶皱,叶子区域的某些部分被黑色像素覆盖。如何将整个叶区变白?我如何照顾叶子褶皱?我正在 matlab 中做一个图像处理项目,我将不得不对叶子进行分级。如果有人能给我代码来处理数字图像中的叶子褶皱,那将非常有帮助。我正在使用 MATLAB 2009a。

第一种方法可能是使用 rgb2gray() 而不是 im2bw(),像这样:

c=rgb2gray(b);
figure,imshow(c);

其中 b 是您调整大小后的图片(如您的代码中所示)。将显示以下图片:

然后您可以只计算非零像素的数量(矩阵 c 中的值)。回想一下 0 表示黑色。

虽然你一定注意到,即使在原始图片中,上边框和左边框也有灰色边缘,在这张灰度图片中是白色的。右下角的日期也将被计为非零。为了获得更好、更准确的结果,我建议使用某种算法来检测叶子的边缘,例如 Kass 等人。 "Snakes, active contour model"。这种算法被描述为 here.