Imaging at 1000x magnification

For the first time I was able to reliably takes panorama of large regions at 1000x magnification:

Imaging at this magnification is a real challenge.


Everything that follows will use only the:

  • 1.5x magnification wheel of my microscope
  • 0.5x reduction lens of the camera
  • SC303-CK CMOS 4.51mm*3.38mm 2048x1536 camera sensor
  • my 100x/1.25 N.A. oil objective as reference

Some context

This magnification is the maximum power of optical microscopes because of the limited resolving power of visible light.

The resolution size can be calculated using the following formula and depends on the wavelength of the light and the numerical aperture of the objective.

r = 0.61λ / N.A.
r_b = 0.61⋅450 / 1.25 = 220
r_g = 0.61⋅500 / 1.25 = 244
r_r = 0.61⋅625 / 1.25 = 305

So, if we use the green channel as reference, we can resolve details up to 240nm.

With this configuration, approximately:

  • 1 pixel = 0.4089⋅10-4 mm = 0.04089 µm = 40.89 nm
  • 24456 pixels = 1mm
  • 25 pixels = 1µm
  • 0.025 pixels = 1nm

Just by counting pixels we can deduce the size of visible features.

For example, the pitch of the W538T808 is 45 pixels = 1.84µm, so it’s node size should be arround 920nm. That’s 4x more than what we can resolve.

W538T808 pitch size.

My tiles are 1516 pixels wide = 62µm.

Imaging challenges


At this size backslash is clearly visible. This is a problem, especially for the focus.

Fortunately, this can be corrected in software.

Every time you want to move to a specific position in a different direction, you must first move in the opposite direction to compensate for the backslash.


Expansion of materials will cause Z drifting over time.

The only way to prevent this is to implement an autofocus routine.


At this size vibrations are becoming a real problem.

I had to disable the cooling fan of my controller board because it was affecting the image a lot.

I also implemented a vibration detector to pause any capture if the image is not stabilized.

Fun fact, when testing my panorama routine stopped randomly.
I looked for a while to see where the vibrations were coming from without success, until I thought I’d come downstairs and that’s when I saw the neighbors doing some construction work. I couldn’t hear it from my apartment but vibrations were clearly visible on screen

Avoid collisions

At this magnification the working distance of the objective is really small.

I added extra protections in the firmware of the stage and also on the software to prevent the Z axis from moving beyond a certain distance.

Objectives are somehow protected by a spring system, but any movement after a collision will scratch the lens of the objective. Of course, this must be avoided to not damage the objective.


It’s not just the capture that’s a challenge.

A lot of data is generated.

For example 1/4 of the W538T808 die produces 3245 tiles.
I keep all the images (12 / tile, at different focuses) for further processing and this weighs 280GB in an uncompressed format.

It is a challenge to stitch, but will also produce enormous images.

The first part of the W538T808 produces an image of 53045 x 50133 pixels. It’s close to the limits of many formats such as jpeg (65535 pixels), and I was not able to open it with Gimp even if I have 32GB of RAM.