• "Anode rejuvenation event"

    Ahron Waynea day ago 0 comments

    So my tube has been going down the crapper, well, since it was manufactured in 2007. That's what tubes do --- tungsten anodes wear out, maybe the oil starts to foul, high voltage arcing events add up. The anode is the thing that 100% sure "wears" --- it's essentially a light bulb filament, constantly boiling off electrons and at the same time growing ever more and more thin. It is a testament to the build quality of the PXS unit that it even still works at all. 

    Earlier, I had turned down an offer to which trimpot to adjust to increase the heating/ brightness, after all since the thing worked at all and a dim x-ray source is better than none, and this might accelerate its demise. That demise was defined by, 15-20? microamps at voltage when I got it, and recently, barely 6 or 7. Very long exposure times...

    And it got to the point that I was raising the voltage just to get that extra bit of punching power, and a couple extra microamps. (For reference, medical x-rays are measured in Milliamps.) And then after a particularly long scan failed, I popped up the voltage again and experienced my first big arcing event! 

    The lights turned on and off and the current spiked to at least 200 microamps --- and you could hear something happening. Damn! X-rays came out as a trickle, barely illuminating the image, even with the current so high. Damn, damn, damn, that's it I guess.

    Until on a whim I tried unplugging it and plugging it back in. And turned it on to voltage, no current, it held. Nice... and then 60 kv, "20" microamps... and it got to 20. 

    70kv held. Produced real X-rays. much brighter than before! I just ran a scan at 70kv, and the thing held, rising from 26-29 overnight and running for 24 straight hours. It's definitely not just leakage, either; I've had to adjust my exposure times to be much shorter, with the added benefit I can now use more image averaging. Last scan was bin 2, 25 microns, 2500 images (200 degrees rotation) and 8x image averaging. By far the longest scan I've done, and hopefully, the data will be good and you'll get to see what it is. 

  • Faster scans with AI?

    Ahron Wayne05/02/2024 at 00:00 0 comments

    Using Noise To Void https://arxiv.org/abs/1811.10980 for fiji, which can be trained to recognize noise from just many unlabeled images. It is best for noise that it is due to poor signal, like for instance is the case if you have an old weak x-ray source. (6-7 microamps at 60kv, now).  

    This is a kit kat bar, and that is actually a pretty substantial difference. Whenever you do this, you're in a sense corrupting the image, but generally to a state that is more pleasing to the eye. 

    This is what the kit kat projections look like with and without edge finding (the "filtered" part of filtered back projection). 

    It's not meant for structured noise, but it still doesn't do a terrible job at it anyway. AI is weird. 


    I'll close this tiny update with a little video of Mr. Lego man. This kind of scan, that shows such obvious signal to noise problems (being scanned in 5 minutes, which is very fast for this machine), would benefit the most from ML denoising. 
     

  • The Short Scan, 2D images, Saving my Dying Source and other blitz misc

    Ahron Wayne11/15/2023 at 22:53 5 comments

    Okay, this will just be another schmorgasborg update as again, I haven't been doing 

    nothing, but it doesn't really fall into the neat little buckets like "changing the source" or "putting it on the truck" like in the first weeks. So:

    0: Guess who won a thing! https://scrollprize.substack.com/p/segmentation-tooling-2-winners Woohoo!


    That pays for the scanner and the source and all the other random little doodads, just about! 

    1: The super blurry scans we saw early are a thing of the past because of... the SHORT SCAN! 

    from XRayPhysics.com:

    In most lab CT, just like in the gif above, the object or source/detector rotate a full 360 degrees to scan the object. Which kind of makes sense, because that's what you would do with structured light scanning, or photogrammetry. But in reality, the minimum angle of rotation for a complete reconstruction is actually just 180 degrees! (+ fan angle). This is because, the x-rays go through the object. The projection of the object is the same 180 degrees apart (ignoring geometric magnification differences). You can see this in the reconstruction in the gif above; the reconstructed circle is complete at about the half way mark for the rotating source. 

    The rest of the 360 degrees is actually somewhat redundant! Ideally, more samples increase the signal to noise, but this is still kind of weird to me that it's the standard because by default some of the object is sampled twice and some is only sampled once. 

    The problem is that in our system, our rotary axis is super wonky in an as-yet-undetermined way. And this means that after the 180 degrees rotation, the object does not actually return to the exact same position, and the extra projections are even worse than redundant. You've got two good datasets fighting each other. I noticed this when I chose the "short scan" reconstruction method and the recon got way better, even though I was throwing away nearly half of the projections. 

    So now scans are way way better! And I can scan and make STLs of really important things like:

    Tiny resin print, professor's son's babytooth, snicker's. 

    2: I've been using the scanner for 2D images a lot! 

    Here's a picture of an old foil pokemon card! It's definitely not part of a project I've been working on for 2 years. I certainly haven't been collecting a large dataset for being able to look inside the unopened pack with simple 2D projection images. Incidentally, if you have experience with supervised convolutional neural networks for pix2pix, please reach out. 

    (guess who it is in the comments below!) 

    Or look at this starter thing? That's neat. 

    3: I came up with a scheme to extend the life of my source --- especially when taking series of 2D pictures where you would otherwise have to turn the source off, open the door, put the thing in, turn it on... the source has basically a filament light bulb inside, and just like regular visible ones the harshest thing is turning them off and on. And I was noticing that the power has gotten even lower than before. I try not to push it too far past 0.5 watts! 

    Daniel said something like "you can use the position of the tungsten shutter to know when it's safely blocking the source and have an Arduino move it to there whenever you open the door". I took this to mean, you can monitor the position of the tungsten shutter with an encoder and when it's blocking the source, change the voltage to 2.5v really quickly to make it stop rotating. 



    Hey, it works! And maybe I'll do daniel's idea eventually. Something like this is clearly what the original designers intended for when they created a tungsten shutter with an encoder attached to it. It's so much better than turning the source on and off and it REALLY works --- radiation meter sees no more than background inside the machine when...

    Read more »

  • Unwarping the Detector

    Ahron Wayne10/10/2023 at 02:00 0 comments

    There are many things that are wrong with this machine. This was one of them. I thought it would be easier to fix, but it wasn't. I also thought it would fix all of my problems, but it didn't. Anyway, I haven't been doing nothing these past few weeks --- I've been trying to unwarp the detector. What do I mean by "unwarp"?

    Well, modern flat panel X-Ray detector consists of a few main components, but for the sake of this problem there is a scintillator, which converts x-rays into visible light, and then the actual electronic detector, like a CCD, which converts the visible light into an electronic signal:

    The thing is, this detector is not so modern. Detectors weren't so much bought commercially from Viscom or whatever as they were often assembled as necessary for specific applications. This detector was engineered specifically for CT scanning by coupling a low noise (for the time) CCD to a scintillator plate... and in between those two things, a bundle of thousands of optical fibers. For more on that, see https://hackaday.io/project/191395-x-ray-ct-scanners-get-new-life/log/223337-image-offsets-ancient-scrolls-broken-shutters.

    We saw that offset correction work to make the image nice and crisp and remove the pattern and peeling, but it turns out there's also nonlinear warpage at play here --- warpage that is a major source of error unless it's corrected. Originally, it was corrected with a "BB grid" --- Item #2 of the 10 things in this image that I don't actually have: 

    So clearly, I had to make this "BB" grid. It nominally consists of 196 ~0.011 inch tungsten carbide balls spaced out 5mm (love the units), but surely I could fudge this a bit. For instance, I found out that you can get tiny lead balls for cheap for BGA soldering: 

    Now how to make a relatively precise grid? 

    Attempt #1: FDM printing didn't go so well on account of the balls are too small. 

    Attempt #2: SLA printing could produce the holes...

    ...but the process tends to warp with large flat things. 

    Attempt number THREE, I said, well, maybe I can just laser cut the dang thing out of acrylic. Actually, with a bit of tuning this worked relatively well!  

    Yes, putting 196 of these in a grid was as laborious as it sounds --- I actually rolled my finger over to get the bulk of them and then inspected and placed individually when needed. It wasn't trivial to make sure just one of the balls was in place either, and then I glued them and taped over for good measure. 

    There it is on the detector:


    And now we can see what kind of warp we're dealing with! 

    But that's.. hmm. Those balls are crooked. The detector can't be that warped. it's playing tricks with my eyes. The laser cut method is just too imprecise, and I didn't really want to introduce that kind of uncertainty to an already very uncertain calibration process, I thought. So I took the idea of Paul the Original Guy Back at EVS (again) and get a circuit board printed with JLC PCB, with the idea of using the copper pads as targets! 

    Now this --- save that aggravating misplaced pad you might spot that I had to cut out --- should work accurately, if anything would. (I also used it to determine the "mask" of useful pixels on the detector, incidentally). 

    This is the "transgen" program: 

    It's kind of cool, once you figure out the parameters that lead to a good search for the red boxes. It took a few tries. But once you do, and all the centroids are located, you get a file that now should hopefully unwarp and make things much more accurate! 

    And it does! More pats on the back! 

    I tested it by swapping the old file of a couple of recent scans. The results were, I would say, noticeable but not solving a few specific big artifacts, like rotation...

    Read more »

  • A visit to Scott's Valley: Resolving the Kevex Quest

    Ahron Wayne09/29/2023 at 03:51 0 comments

    Once upon a time, there was a company called Watkins-Johnson. It made microwave tubes and other microwave devices, mostly. But also equipment for electronic warfare, antennas, and semiconductors. Some of that equipment included technology involved in producing X-rays. And after a bit of a spinoff, that technology would become known as Kevex. 

    KEVEX. It was the place to be in the 80s and 90s if you were in the land of x-ray --- so popular that in the early 2000s it got bought by Thermo-electron corporation, becoming Thermo-Kevex tubes. And then with the merger of fisher scientific, simply Thermo-Fisher tubes. Known especially for being small and portable: In fact, that's what the PXS in the PXS-925 stands for: Portable X-Ray Source. 

    How do I know all this? I got a tour! 

    That there is John, X-Ray engineer of 19 years and very gracious host. The trip was borne out of my very long quest to obtain some basic information on the tube for our system to be able to safely drive and maybe service them and such. Now I'm not crazy enough to fly out to California just for this, but I WAS going there for work anyway, so why not stop by? 

    *(Warning: Incorrect info in the next paragraph)*

    I wish I could show you all of the AWESOME things I saw. This is not a factory where they put a couple of components together and slap a label on them. This was the real deal. They have a glassblower who makes the tubes BY HAND. (Out of a particular brand of shot glasses, I thjnk)? The cathodes come from the guy who owns Cathode.com. Gas is vacuumed out of oil, contaminants are baked out in big ovens, spot size is checked with intensifier screens. I wore a film badge. I learned a ton, I think, not that I really remember enough in detail to explain it. It was all one big x-ray factory blur, a Disney World for x-ray nerds. 

    But how about one tidbit --- how to test if, for the dead source at my friend's wood shop, whether it's the tube or the high voltage source that's bad. Stand the source up on its end, vertically, "so the oil doesn't leak out". Pull out the tube (you can do this, apparently), and then slowly, carefully, raise the high voltage up. If it still goes up, the HV is good, the tube was bad! Otherwise, the HV is bad, the tube was good! Good luck assembling it back together without air bubbles, but at least now you know! 

    Oh, and don't raise the HV too fast or you might get a room full of oil. 

    *Update with correction: John has informed me that they do NOT make the glasses out of shot glasses! It's blown there but the material is from a major supplier of scientific glass. And that the cathode.com guy is just a friend, also local and part of the unique ecosystem of businesses that made the factory possible. 

  • A Working Shutter

    Ahron Wayne09/23/2023 at 01:44 0 comments

    Finally. 

    The secret? In the end? Calling the number on the back of that motor driver. I was talking to an engineer in about 90 seconds, and he was emailing me the datasheet and user manual five minutes after that. He knew which line of motor driver product I was talking about, and keep in mind the manual says that the requirement was for Windows 95. Way to go, Shawn from Faulhaber! 

    Those are uploaded to the files list now --- honestly, the driver is incredible overkill for the main task of, like, spinning at a constant and adjustable speed. With digital control you can tell it to home, run macros, report the speed and adjust PID loops, compensate for backlash, set external triggers. And with DeviceNet address and coordinate between thousands of motors. 

    I wanted to make the thing spin at a constant and adjustable speed. And unfortunately, I couldn't get said digital RS232 to work --- maybe eventually, but with all that frustration... why not just take advantage of the analog input for speed, just in case all you want to do is make the thing spin at a constant and adjustable speed? 

    Analog input: Zero volts, spin in one direction. Five volts, spin in the other direction. 2.5 volts, stop. And then everything in between, at 10 bits of ADC. THANK YOU, SHAWN! 

  • Image offsets, ancient scrolls, broken shutters

    Ahron Wayne09/18/2023 at 01:50 2 comments

    Don't worry, I'm not planning on running the x-rays like this. The cover had to come off because it was probe-y probe-y time again, as we try to fix the shutter (seriously? Again?) which I blew up by accident a few days ago. Actually just the driver board, thankfully.  

    I've spent the last couple of days haaaaaaaaaaaaaating the shutter server, again, with a passion that burns within all of my soul. Basically, since I destroyed the replacement driver board, I wanted to at least try again to get the original to work. And why not? It's perfectly tuned for the motor already... you just CAN'T CONNECT TO IT !@$@$@$%@%@$#%#%! 

    There's the box that controls the motor, which it turns out even has an encoder. Which would mean it could be used for such very useful and safe things such as moving the tungsten shutter to cover the source when you want it to. We know the motor can be held in position and stably, thanks to some knowledge gleaned while trying to connect to the shutter server, but if we get into that we'll be here all day. Sigh.

    I don't think we had much of a warranty anyway. Daniel knew about all the stuff that was inside here, but unfortunately even he didn't spot the magic analog make it go whirr and how fast button. 

    Before the current state of machine malaise, I did some reading and experimenting with calibration, recon settings, and scan acquisition. I think the coolest .exe power I got is applying offset images. You can see in this (FULL RESOLUTION 1X1 binning!!) image, squee, that the detector over the years has sustained a bit of damage: 

    This is still kind of an awesome image IMO. It's 1x1 binning, and the detail of the detector backing, or fiber optics, is actually pretty cool. To take a 1x1 bin image needs a long exposure time, but our shutter couldn't be ramped down that slow. So instead we just average 10 times, which results in the same SNR as a full exposure image pretty much. 

    But yeah, that pattern! And the peeling, yikes! the color is all different! It's practically dirty! What's that gonna do the scans of this round thing?

    Not much, if you just apply the blank picture of the detector as an offset image. 

    Like a cheat code for image processing. There's a lot of chasing the last little bit of quality like by taking multiple references, spaced out through the scan, but 99 percent of the benefit is from just doing it at all. Even JPEG knows how much cleaner this image is; it's only 30 percent of the size of the uncorrected one. 


    There's more, for sure! The machine had already started proving useful to an applied research task. I'm not sure if I mentioned this yet or not, but this project was born partially out of the Vesuvius Challenge, a very cool and suspiciously side-quest-y goal to read some ancient scrolls that fell into a volcano using x-rays. I've been doing experiments with carbonization to simulate scrolls, with the intent of scanning them. This is now a reality. 


    Cross section of carbonized papyrus, inside bamboo tube! 

    So here's to the future --- we're there, nearly, with just the occasional setback! To ancient scrolls! To image offsets! To a working shutter, eventually. 

  • It's officially a computed tomography scanner!

    Ahron Wayne09/04/2023 at 21:58 0 comments

    Yay! 

    Since the last post: 

    The shutter has been made less crappy using a dedicated BLDC driver for motors with hall effect sensors. It's not set up right still, but the shutter is moving slowly enough to do real exposures of about a second long. 

    So let's do a scan! 

    First we have to choose our protocol, where we define the exact parameters for the scan. Since we're sticking with 4x4 binning (or pixel ganging), we don't need that many projections or exposure time or averaging, which is perfect for us. For my initial testing, I'm using a voltage of 60 kv and a current of '30' uamps, which actually leads to about 16-20 microamps. And I'm placing the object at such a position to get a voxel size of about 50 microns. Lastly, I am, for instance, taking 200 projections --- a rule of thumb is 1 projection for each pixel in x/y the object crosses while rotating, but in practice you can still get a lot of info from less than that. The scan lasts about 7 minutes.  

    As an aside, the program is really annoying in that it won't let you run unless the X-rays have been warmed up in the last 15 minutes (to a higher voltage than I actually want to run which I don't think helps the tube). So I hack it to run anyway by just changing the system time to when it was last warmed up according to it. Yolo. 

    And to my surprise, you hit that "scan" button and it just starts going. I was worried that the the motors would be asynchronized with the shutter, but for once it seems like something with the shutter works correctly. 

    After the scan is done, it turns off the x-rays automatically (we'll see what I can do about that) and then prompts you to remove the sample for taking bright and dark field images. These are images with nothing in the way and can be used to mitigate various things like, a damaged scintillator or dead pixels. 

    Goodbye, peeling scintillator! 

    This is a huge boost to quality just with that offset difference. Like an image processing miracle in my opinion. 

    Now, after my first scan was run, I hit "recon" and nothing happened. Used to bugs and happy with the progress I had made I went home and came back the next day to sort it out. Found that there's some kind of reconstruction server as well as a command line utility; after a restart, both work, with the command line utility being more ancient and robust but slower.

    And finally... after hitting recon. It does some filtered back projection and, ta-daaaaah, we have our reconstructed scans. 

    And then there's the 3D scanning aspect of 3D, computed tomography, where in the simplest form you just pick a greyscale value threshold that forms a surface and which can be exported as an STL.

    This is just one example, but it exemplifies the kinds of scans we'll be able to do with the machine. 

    So there you have it! Exactly three months from picking up the machines to getting one working! Let's see how much we can improve it, now. 

  • The original computer solves not all of the problems

    Ahron Wayne08/31/2023 at 16:32 1 comment

    Since our last post I changed the entire computer (again, I suppose). An HP-XW8400: Found on ebay at a decent price finally, this was what was originally used by the SP after upgraded from Windows 2000 to XP. 

    I hooked everything up and... problems.

    i mean, the recon interface hadn't worked before, either, but why not? So I then re-cloned the hard drive image, to this old physical hard disk, with the idea that I would be way more careful and methodical this time. Even that process involved fixing a bunch of small bugs --- like the hard drive image (160 gb) being too big for the hard drive (160 gb). 

    So let's take a step back at our little CT nook:

    The place is a mess. Most of the screws on the panels are off, as is the extra shielding. There are tools and allen wrenches everywhere. Four hard drives, a few computers, thousands of pages of documents, the old x-ray source, and every cable you can imagine. I've taken the machine apart and put it back together again, I've connected motors to external controllers, tracked down capture cards and service engineers and now finally I have most of the original hardware, and all the original software, on an original hard drive clone.

    And now the reconstruction utility opens! And like before I can move the motors. I can fire x-rays. I can see images. Everything seems to work. Everything but the shutter server. 

    It's supposed to be on port 3. Why isn't it on port 3? Why does the registry say it's supposed to be on port 3, when that's where the x-ray and motor controller is? Why doesn't it work on ports 4-6 either, which are the only other ports that another working system has registered? Why doesn't it even try to communicate with those ports when they're open? HOW COULD IT BE ON PORT 3 IF THE X-RAY MOTOR CONTROLLER IS THERE???

    ARGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 

    The funny thing is --- I figured out that with the frame capture software, there's actually settings that will let it take images without the shutter at all, which confuses me to no end --- with all that trouble, why did they even bother with it? As an example, here's a blurry phone-shot live-view video of what appears to be a parasite in my acorn. 

    Unfortunately, the triggering for the camera and all the software still requires a physically rotating shutter. If the frame grabber software were better, perhaps I would forgo the shutter entirely, but the easiest path forward still looks like using the original scan and recon software, which is annoying for other reasons like that it makes you "warm up" the x-rays all the way to 90 kv even if you only plan on doing 60 kv scans which is bad for it. 

    And so this weekend I'll try to build a better shutter controller that works with the hall effect sensors hopefully, so I can drive it slowly and take real scans. 

  • "Sunday's Shutter Server"

    Ahron Wayne08/20/2023 at 23:12 0 comments

    The motor is a Brushless DC, which can mean a lot of things. This one runs on three phases. And it uses hall effect sensors. It took a lot of reviewing brushless motors and motors in general to understand that much, and I still can't drive it properly. 

    can, however, drive it inconsistently and badly by connecting the three phases to an electronic speed controller for drones and completely ignore the hall effect sensors. The result is a slightly jerky but moooostly stable at speed rotation, though it can't be run slowly. Also it makes a scary noise sometimes. Also also also, you have to crank start it by hand like an old plane propeller (really). It'll keep going but won't start back up if the power goes out and comes back on. 

    Pretty janky part of the setup, but compared to not turning at all..? I'll properly use the hall effect sensors will allow it to be driven slowly and precisely at some point (maybe while solving a bunch of other things simultaneously --- stay tuned). But for now, it does what it needs to, and lets me way more easily take images!

    There's my head! It's 3D printed and is made of glass. 

    This is a picture of an acorn! 

    In fact I've been able to do some crude scans while rotating --- set "Fluoro" to take 100 images while using a different program to set the part rotating. In theory, I should be able to take this info and guesstimate a few parameters for a crude reconstruction.