2009-07-08 99 views

回答

3

只要您使用像您提供的二进制图像一样的工作,形态过滤就会很好。扩大图像,然后减去原稿。

alt text http://img29.imageshack.us/img29/1420/morphf.png

这里是一个MATLAB例如:

lImage = zeros(19, 19, 3); 
lImage(7:13, 7:13, :) = repmat(... 
    [0 0 1 1 1 0 0; ... 
    0 1 1 1 1 1 0; ... 
    1 1 1 1 1 1 1; ... 
    1 1 1 1 1 1 1; ... 
    1 1 1 1 1 1 1; ... 
    0 1 1 1 1 1 0; ... 
    0 0 1 1 1 0 0;], [1 1 3]); 
figure; imshow(lImage); 
lOutline = imdilate(lImage, strel('disk', 1)) - lImage; 
lOutline(:, :, 2:3) = 0; 
figure; imshow(lImage + lOutline); 
1

我想你需要一个边缘检测算法。尝试thisthis

+0

非常感谢REFFERENCE安东,还是让我来试试这些 – 2009-07-08 13:41:02

4

快速和肮脏的解决方案。如果颜色发生变化,则将像素逐像素地运行,只是将像素绘制为红色。

PS:请注意,这可能不是一个方形的工作,除非你做同样的垂直和水平

+1

这很可能是解决这个有限问题的最快解决方案。这个问题没有必要使用更强大的边缘检测器! – 2009-07-08 14:25:55

0

从来没有做过这样的事,但对于复杂的图像处理功能强大的工具是:

http://www.imagemagick.org/script/index.php

很多文档和示例 - 如果您不打电话给可执行文件,可以使用.NET包装器。

0

有趣的问题 - 我假设你的例子中的'白圈'实际上是另一个图像 - 这意味着你不是自己画圆圈?

如果是这样,您可能会扫描所有像素以找到至少在其一侧具有黑色(4个方向或8个包括拐角)的白色像素。如果它匹配,则将其交换为红色。如果没有,那就忽略它。

我怀疑这是做这件事的最好方法,但如果它只是黑白的,这可能会让你开始。

0

有几种方法。

第一个是: - 你知道有一个圆圈,你需要找到中心在哪里,半径是多少。所以你可以使用Hough transformation找到这些,他们用红色绘制你的圈子。 读this topicthis one

的第二是使用边缘检测。Hereherehere用于更多的理论观点)

0

最终你想要编辑图像的像素。这个问题已经在这里被Marc Gravell解答了。

然后,根据您选择的选项LockBits或GetPixel/SetPixel,您需要循环查看每个像素的颜色值。保持循环,直到你点击一个白色像素。

一旦你这样做,检查周围的所有方向,如果你找到一个黑色像素,然后颜色,白色像素红色。这当然是最简单的答案,并且有方法来优化它,但它会起作用。例如,如果您想将颜色变化限制为仅四个直接相邻的像素,则可以,而不是检查对角线。

0

边缘检测?图像处理? OpenCV!有lib的C#包装器。不是“简单”的解决方案,但你用这个库获得的任何exp是一个好的简历构建器。如果你的公司正在做图像处理,他们可能已经在使用它。