【问题标题】:How can i remove specific color from Image and Identify Positions?如何从图像和识别位置中删除特定颜色?
【发布时间】:2016-05-25 22:56:13
【问题描述】:

我有一个 .png 的图像,我想用给定的图像执行以下任务:

1 -从图像中去除不必要的白色阴影。

2 - 识别图像中大黑点的位置/坐标。

对于Task 1,我的尝试是:

img = imread('1.png');
imshow(img);
I = img;
[r c] = size(I);
for i=1:r
    for j=1:c
        if I(i,j) > 230 %here i am changing 240 to different values to get result 
            %but this is just some hack
            I(i,j) = 0;
        end
    end
end
imshow(I);

原始图像在哪里:

Matlab 的结果是:

对于(2),我不知道该怎么做,感谢任何帮助。

注意:我是图像处理的新手,所以请用简单的方式解释我,以便我理解。谢谢

【问题讨论】:

  • (1) 将图像转换为灰度图像,然后应用阈值(例如I_gray > 0.4; --> 然后应用de.mathworks.com/help/images/ref/regionprops.html 找到图像的边界框。(2)使用相同的函数@ 987654331@ 使用 Centroid 选项来查找您的圈子。如果您提前知道圈子的粗略大小,那么您甚至可以指定它以获得最佳结果。
  • 另一种很好地找到边界框的方法:stackoverflow.com/a/10140148/701049

标签: matlab image-processing


【解决方案1】:

对于任务 1,我不完全确定您所说的“删除”是什么意思,从您的代码中,我猜您想将像素值设置为 0。 一种更简单、更快捷的方法是:

img = imread('1.png');
img(img>230)=0;

此代码将所有大于 230 的 img 值设置为零。 img>230 创建一个大小为 img 的逻辑数组,大于 230 的元素为 true,其他元素为 false。 然后这个逻辑数组用于将这些像素设置为 0。(但你可以对它们做任何你想做的事情)

Matlab 旨在对向量和矩阵进行运算,循环遍历元素通常要慢得多。

对于任务 2,也许看看这个:http://nl.mathworks.com/help/images/examples/detect-and-measure-circular-objects-in-an-image.html

【讨论】:

  • 这与我使用的逻辑相同,但任务 1 是通过此方法 SO Question 实现的,但我正在努力将图像背景存储为透明,但仍然不知道如何实现第二个任务跨度>
  • 哦,我明白了,您想将其存储为白色透明。我在这个主题上找到了这个链接:ch.mathworks.com/matlabcentral/newsreader/view_thread/140948我认为你应该玩一下 imwrite。对于任务二,从我发布的另一个链接中获取灵感,你的图片应该很容易。
猜你喜欢
  • 2021-01-16
  • 2022-01-02
  • 1970-01-01
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多