【问题标题】:black and white Image processing in C#C#中的黑白图像处理
【发布时间】:2010-11-09 01:07:36
【问题描述】:


(来源:googlepages.com

在上图中,我想用红色标记圆形的边缘 像这样的


(来源:googlepages.com

我不知道应该如何进行,任何帮助/建议将不胜感激......

【问题讨论】:

    标签: c# image-processing image-manipulation


    【解决方案1】:

    我认为你的问题的答案就是答案

    http://csharpkodu.blogspot.com.tr/2014/04/grafik-snfna-devam.html

    【讨论】:

      【解决方案2】:

      只要您使用像您提供的那样的二值图像,形态过滤就可以很好地工作。放大图像,然后减去原始图像。

      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);
      

      【讨论】:

        【解决方案3】:

        快速而肮脏的解决方案。逐像素运行图像,如果颜色发生变化,只需将像素涂成红色。

        PS:请注意,这可能不适用于正方形,除非您在垂直和水平方向上都这样做

        【讨论】:

        • 这很可能是解决这个有限问题的最快方法。对于这个问题,不需要使用任何更强大的边缘检测器!
        【解决方案4】:

        边缘检测?图像处理? OpenCV!该库有 C# 包装器。不是“简单”的解决方案,但您使用此库获得的任何 exp 都是一个很好的简历生成器。如果您的公司正在进行图像处理,他们可能已经在使用它。

        【讨论】:

          【解决方案5】:

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

          然后,根据您选择的选项(LockBits 或 GetPixel/SetPixel),您需要循环查看每个像素的颜色值。继续循环,直到碰到一个白色像素。

          完成后,检查它周围的各个方向,如果找到黑色像素,则将该白色像素涂成红色。这当然是最简单的答案,并且有优化它的方法,但它会起作用。

          例如,如果您想将颜色更改限制为仅四个直接相邻的像素,您可以这样做,而不是同时检查对角线。

          【讨论】:

            【解决方案6】:

            有几种方法。

            第一个是: - 你知道有一个圆,你只需要找到中心在哪里,半径是多少。所以你可以使用Hough transformation 找到这些,然后它们会用红色画出你的圆圈。 阅读this topicthis one

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

            【讨论】:

              【解决方案7】:

              您几乎肯定想使用Canny Edge Detector,它应该能够轻松做到这一点。 My company 的产品线就包含了这样一个工具,这是运行它的输出: alt text http://www.plinth.org/_images/image1Output.gif

              【讨论】:

              • Canny Edge 检测器似乎有点矫枉过正,除非他正在处理更复杂的图像。
              【解决方案8】:

              有趣的问题 - 我假设您示例中的“白色圆圈”实际上是另一张图片 - 这意味着您自己没有画圆圈?

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

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

              【讨论】:

                【解决方案9】:

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

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

                大量文档和示例——如果您不想调用可执行文件,还可以使用 .NET 包装器。

                【讨论】:

                  【解决方案10】:

                  我至少可以为您指明一些非常简洁的边缘检测过滤器的方向: http://www.codeproject.com/KB/GDI-plus/edge_detection.aspx

                  我想它应该很适合你

                  【讨论】:

                    【解决方案11】:

                    您正在寻找的是边缘检测。您可以在 Google 上找到一些通用算法的资源:

                    http://www.google.com/search?q=edge+detection+.net

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-03-15
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多