Use SVGs to create the geometry for the tilable surface.
There are several problems with the displacement approach:
The first is that the resolution of the image will play a crucial role in the shape: pixels are always square and terrible to describe diagonal lines or curves.
But even when using a with a very large image to drive the displacement on a highly subdivided mesh, the problem is going to be creating geometry that adjusts to the shapes on the image. You would still find some inaccuracies when the pixels in the image do not align with the vertices to be displaced.
Therefore I suggest using curves.
Trace the bitmap image in a vector drawing program like inkscape, illustrator or similar, so that you can create paths that conform to the shapes in the image. Save the paths as SVG
Then import the SVGs into blender, they will be curve objects. Give the curves some extrusion, or use the original images to drive the displacement.
You will get very precise borders with an adequate number of vertices that should 3D print nicely.
To create surfaces using the shapes you created
Join the curves into a single object, convert it to a mesh (Alt+C),
and then use the tissue addon, as suggested by @moonboots, to create a surface using your base object.