4
$\begingroup$

Does anyone know the syntax to DistanceFunction? I am trying to define my own function to use with ClusteringComponents; e.g.,

ClusteringComponents[img, DistanceFunction -> (Norm[#1 - #2] &)]

Needless to say it does not work as shown (it overflows for some reason). I also tried using ImageData@img but that does not even terminate.

$\endgroup$
1
  • $\begingroup$ AT least in V8.0 ClusteringComponents[]doesn't seem to accept a custom DistanceFunction. Just those listed in the help $\endgroup$ – Dr. belisarius Jan 25 '13 at 8:06
8
$\begingroup$

I tested ClusteringComponents with the examples provided in the Documentation Center (http://reference.wolfram.com/mathematica/ref/ClusteringComponents.html) of Mathematica. In Options > DistanceFunction there is an example provided how to use your own DistanceFunction in ClusteringComponents:

ClusteringComponents[{{1, 2}, 3, {10, 11}, {12, {13}}, 14}, 2, 1, 
     DistanceFunction -> (Abs[Length[#1] - Length[#2]] &)]

I tried to apply this to an image without any success. I only ended up with some very strange looking error messages. After a few more tests I found the following solution. First of all, ClusteringComponents seems to work with a selfmade DistanceFunction only if you provide it with ImageData of a grayscale image. The following approach works:

Colorize@ClusteringComponents[ImageData[ColorConvert[img, "GrayScale"]], 3, 
  DistanceFunction -> (Norm[#1 - #2] &)]

enter image description here enter image description here

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.