-1

我已将图像转换为二进制(黑白)。这是原始图像二值图像

这是我写的代码

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。

4

1 回答 1

0

第一种方法可能是使用rgb2gray()而不是im2bw(),如下所示:

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

您调整大小的图片在哪里b(如您的代码中所示)。将显示以下图片: 在此处输入图像描述

然后你可以只计算非零像素的数量(矩阵中的值c)。回想一下,这0意味着黑色。

尽管您必须注意到,即使在原始图片中,上下边框也有一个灰色边距,在这张灰度图片中是白色的。右下角的日期也将被计为非零。为了获得更好和更准确的结果,我建议使用某种算法来检测叶子的边缘,例如Kass 等人。“蛇,活动轮廓模型”。此类算法在此处进行了描述。

于 2016-02-17T15:21:16.923 回答