簡體   English   中英

C#中的黑白圖像處理

[英]black and white Image processing in C#

替代文字
(來源: googlepages.com

在上面的圖像中,我想用紅色標記Circle的邊緣

替代文字
(來源: googlepages.com

我不知道該怎么辦,任何幫助/建議都會受到高度贊賞......

快速而骯臟的解決方 逐個像素地運行圖像,如果顏色發生變化,只需將像素塗成紅色即可。

PS:注意這可能不適用於正方形,除非你在垂直和水平方向上做同樣的事情

只要您使用二進制圖像(如您提供的二進制圖像),形態過濾就會很好。 擴大圖像然后減去原始圖像。

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

您幾乎肯定想要使用Canny Edge Detector ,它應該能夠輕松完成。 我公司的產品線包括這樣一個工具,這是運行它的輸出: alt text http://www.plinth.org/_images/image1Output.gif

我想你需要一個邊緣檢測算法。 試試這個或者這個

您正在尋找的是邊緣檢測。 您可以在Google上找到適用於常規算法的大量資源:

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

我至少可以指向一些漂亮的邊緣檢測過濾器: http//www.codeproject.com/KB/GDI-plus/edge_detection.aspx

我想它應該適合你

從來沒有做過這樣的事情,但是復雜圖像處理的強大工具是:

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

大量文檔和示例 - 如果您不想調用可執行文件,還需要.NET包裝器。

有趣的問題 - 我假設你的例子中的'白色圓圈'實際上是另一個圖像 - 這意味着你不是自己畫圓圈的?

如果是這樣,您可以掃描所有像素以找到在其至少一側上具有黑色的白色像素(4個方向或8個包括角)。 如果匹配則將其交換為紅色。 如果沒有,那么忽略它。

我懷疑這是最好的方法,但如果它只是黑色和白色,這可能會讓你開始。

這有幾種方法。

第一個是: - 你知道有一個圓圈,你需要找到中心的位置和半徑。 所以你可以使用Hough變換找到它們,然后用紅色繪制你的圓圈。 閱讀本主題 主題

第二是使用邊緣檢測。 這里這里這里有更多的理論觀點)

最終你想要編輯圖像的像素。 Marc Gravell已經在這里回答了這個問題。

然后,根據您選擇的選項LockBits或GetPixel / SetPixel,您需要循環查看每像素顏色值。 保持循環直到你碰到一個白色像素。

完成后,檢查周圍的所有方向,如果找到黑色像素,則將該白色像素的顏色設置為紅色。 這當然是最簡單的答案,並且有一些方法可以優化它,但它會起作用。

例如,如果您想將顏色更改為僅限於四個直接相鄰的像素,則可以,而不是檢查對角線。

邊緣檢測? 圖像處理? OpenCV lib有C#包裝器。 不是“簡單”的解決方案,但是使用此lib獲得的任何exp都是一個很好的簡歷構建器。 如果你的公司正在進行圖像處理,他們可能已經在使用它。

我認為你的問題的答案就是答案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM