alt text http://parasu516.googlepages.com/Image1.gif黑白图像处理
在上图中我想,以纪念圈的边缘用红色 像这样
alt text http://parasu516.googlepages.com/Image.gif
我不知道应该如何进行,任何帮助/建议将不胜感激...
alt text http://parasu516.googlepages.com/Image1.gif黑白图像处理
在上图中我想,以纪念圈的边缘用红色 像这样
alt text http://parasu516.googlepages.com/Image.gif
我不知道应该如何进行,任何帮助/建议将不胜感激...
只要您使用像您提供的二进制图像一样的工作,形态过滤就会很好。扩大图像,然后减去原稿。
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);
快速和肮脏的解决方案。如果颜色发生变化,则将像素逐像素地运行,只是将像素绘制为红色。
PS:请注意,这可能不是一个方形的工作,除非你做同样的垂直和水平
这很可能是解决这个有限问题的最快解决方案。这个问题没有必要使用更强大的边缘检测器! – 2009-07-08 14:25:55
你在找什么是边缘检测。你可以找到一些资源对谷歌的一般算法:
击败了我:) – 2009-07-08 13:40:32
我至少可以点你一些非常整齐的边缘检测过滤器的方向: http://www.codeproject.com/KB/GDI-plus/edge_detection.aspx
我想它应该适合你相当不错
从来没有做过这样的事,但对于复杂的图像处理功能强大的工具是:
http://www.imagemagick.org/script/index.php
很多文档和示例 - 如果您不打电话给可执行文件,可以使用.NET包装器。
有趣的问题 - 我假设你的例子中的'白圈'实际上是另一个图像 - 这意味着你不是自己画圆圈?
如果是这样,您可能会扫描所有像素以找到至少在其一侧具有黑色(4个方向或8个包括拐角)的白色像素。如果它匹配,则将其交换为红色。如果没有,那就忽略它。
我怀疑这是做这件事的最好方法,但如果它只是黑白的,这可能会让你开始。
你几乎可以肯定地想要使用Canny Edge Detector,这应该能够很容易地做到这一点。 My company的产品线只包含这样的一个工具,而这是运行它的输出: alt text http://www.plinth.org/_images/image1Output.gif
Canny边缘检测器看起来像是过度杀伤,除非他正在处理更复杂的图像。 – 2009-07-22 02:42:11
有几种方法。
第一个是: - 你知道有一个圆圈,你需要找到中心在哪里,半径是多少。所以你可以使用Hough transformation找到这些,他们用红色绘制你的圈子。 读this topic或this one
最终你想要编辑图像的像素。这个问题已经在这里被Marc Gravell解答了。
然后,根据您选择的选项LockBits或GetPixel/SetPixel,您需要循环查看每个像素的颜色值。保持循环,直到你点击一个白色像素。
一旦你这样做,检查周围的所有方向,如果你找到一个黑色像素,然后颜色,白色像素红色。这当然是最简单的答案,并且有方法来优化它,但它会起作用。例如,如果您想将颜色变化限制为仅四个直接相邻的像素,则可以,而不是检查对角线。
边缘检测?图像处理? OpenCV!有lib的C#包装器。不是“简单”的解决方案,但你用这个库获得的任何exp是一个好的简历构建器。如果你的公司正在做图像处理,他们可能已经在使用它。
非常感谢REFFERENCE安东,还是让我来试试这些 – 2009-07-08 13:41:02