寻找图像中的颜色:最近能做到吗?

cor*_*ion 7 wolfram-mathematica

我正试图找到一种在图像中寻找颜色的方法.这是一个简化的例子:

tree = ExampleData[{"TestImage", "Tree"}]
Run Code Online (Sandbox Code Playgroud)

来自Mathematica示例数据集的树形图像

我可以看到那里有蓝色,所以我想在像素海洋中的某个位置找到xy位置.假设我正在寻找特定的蓝色阴影,我可以提供一些近似的RGB值:

Manipulate[Graphics[{RGBColor[r, g, b], Disk[]}], {r, 0, 1}, {g, 0, 1}, {b, 0, 1}] 
Run Code Online (Sandbox Code Playgroud)

简单的混色器

现在我想找到一些具有该值或足够近的像素的坐标.Nearest也许能够做到:

Nearest[ImageData[tree], {0.32, 0.65, .8}]
Run Code Online (Sandbox Code Playgroud)

但不是 - 它"产生了非常大的输出"......

这样做的反面:

ImageValue[tree, {90, 90}]
Run Code Online (Sandbox Code Playgroud)

如果我已经有数字,那就没问题,或者可以点击图片.一旦我想要的颜色的位置已知,我就可以将其提供给需要"标记"的功能 - 例如RegionBinarize.

我觉得必须有Mathematica功能,但还是找不到它......

acl*_*acl 6

做这个

Position[#, First@Nearest[Flatten[#, 1], {0.32, 0.65, .8}]] &@
 ImageData[tree]
(*
{{162, 74}}
*)
Run Code Online (Sandbox Code Playgroud)

做你想要的?

好的,试试这个:

tree = ExampleData[{"TestImage", "Tree"}];

dat = Reverse[ImageData[tree]\[Transpose], {2}];

dim = Dimensions[dat][[{1, 2}]];

nearfunc = Nearest[Join @@ dat -> Tuples @ Range @ dim];

Manipulate[
  rgb = Extract[dat, Ceiling[p]];
  posns = nearfunc[rgb, num];
  Graphics[{
    Raster[dat\[Transpose]], Red, Point[posns]
   }],
  {{p, {10, 10}}, Locator},
  {{num, 20}, 1, 100, 1}
]
Run Code Online (Sandbox Code Playgroud)

这使您可以单击图像上的某个位置,确定与该点的颜色最接近(根据默认标准)的点数,并显示它们.num是要显示的点数.

它看起来像这样:

Mathematica图形