1
$\begingroup$

I'm trying to take an image that consists of several noisy ellipses and use ListContourPlot to generate a contour of the image. However, I'm just getting a single dense line. If I binarize the image I get the correct result, but I lose the detail needed for the contour to be good. However, if I use Posterization with a value of two, it also doesn't work. What is Binarize doing that Posterize isn't, and why does ListContourPlot work with one but not the other?

Sidenotes: I've looked at the image data and the background of the image even before Posterization is mostly true black.

Contours also work with DistanceTransform.

Code:

FN = DialogInput[{filename = temp}, 
   Column[{"Browse for your file:", 
     InputField[Dynamic[filename], String, 
      FieldHint -> "Enter your file name"], 
     FileNameSetter[Dynamic[filename], "Open", 
      Method -> "Preemptive"], 
     DefaultButton[DialogReturn[filename]]}]];
img = Import[FN];
img = ColorConvert[img, "Grayscale"];
(*img = ChanVeseBinarize[img]*)
img = ImageEffect[img, {"Posterization", 2}]
pic2 = ListContourPlot[ImageData[img, DataReversed -> True], 
   ContourShading -> None, Frame -> False, ContourStyle -> Yellow];

Show[img, pic2]

Image In: The source image

Image Output: The output image

$\endgroup$
2
  • $\begingroup$ Your image has an alpha channel that you should remove. $\endgroup$
    – chuy
    Commented Nov 27, 2017 at 18:44
  • $\begingroup$ You can do this first: ColorConvert[RemoveAlphaChannel@img, "Grayscale"]. $\endgroup$
    – chuy
    Commented Nov 27, 2017 at 18:49

1 Answer 1

3
$\begingroup$

With chuys hint:

img = Import["https://i.sstatic.net/vkvMu.png"]

imggray = ColorConvert[RemoveAlphaChannel@img, "Grayscale"]

colTable = {Black, Blue, Green, Yellow, Red}; 

contour = ListContourPlot[ImageData[imggray, DataReversed -> True], 
            ColorFunction -> (Blend[colTable, #] &), AspectRatio -> Automatic, 
            ImageSize -> Medium]

enter image description here

$\endgroup$
1
  • $\begingroup$ This worked! Also, I can use posterization to change the density of the contours. $\endgroup$ Commented Dec 4, 2017 at 18:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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