比较两个图像 - 在巢中检测鸡蛋

时间:2011-12-10 19:12:28

标签: vb.net image-processing

我直接在鸡窝上放了一个网络摄像头。本相机拍摄图像并将其上传到服务器上的文件夹。我想检测一下这个图像是否放了一个鸡蛋。

我认为最好的方法是比较对比度,因为鸡蛋比秸秆巢更具反光性。 (相机具有红外线,因此图像部分为灰度)

如果可能,我想在.NET中执行此操作。

1 个答案:

答案 0 :(得分:2)

尝试将图像调整为较小的尺寸,可能是10 x 10像素。这平均化了任何令人不安的细节。

Const  N As Integer = 10
Dim newImage As New Bitmap(N, N)
Dim fromCamera As Image = Nothing ' Get image from camera here
Using gr As Graphics = Graphics.FromImage(newImage)
    gr.SmoothingMode = SmoothingMode.HighSpeed
    gr.InterpolationMode = InterpolationMode.Bilinear
    gr.PixelOffsetMode = PixelOffsetMode.HighSpeed
    gr.DrawImage(fromCamera, New Rectangle(0, 0, N, N))
End Using

注意:您不需要高质量,但需要良好的平均值。也许你必须测试不同的质量设置。

从现在开始,像素覆盖原始图像的大面积区域,明亮的像素很可能是鸡蛋的一部分。将最亮像素的亮度与平均图像亮度进行比较也是一个好主意,因为这会减少由于全局照明变化引起的问题。


编辑(回应评论):

您的代码结构合理且有意义。这里有一些想法:

使用以下颜色计算颜色值的灰度值:

Dim grayValue = c.R * 0.3 + c.G * 0.59 + c.B * 0.11

...而不是分别比较三种颜色成分。不同的权重是由于我们认为绿色强于红色和红色强于蓝色。同样,我们不想要一个美丽的缩略图,我们想要一个良好的对比度。因此,您可能也想在这里做一些实验。可能只使用红色成分就足够了。根据照明条件,一种颜色成分可能会产生比其他成分更好的对比度。我建议,制作缩略图创建的灰色转换部分,并将缩略图写入文件或屏幕。这将允许您使用不同的设置(缩略图的大小,调整参数,颜色到灰度转换等)并直观地比较(中间)结果。使用(end-)结果创建位图(bmp)是一个非常好的主意。

Using语句为您执行Dispose()。即使在End Using之前发生异常(包含隐藏的Try Finally),它也会这样做。