just chiming in here, but I am working with a clustering algorithm that is extremely lightweight computationally and from a memory footprint perspective. We have been benchmarking in several applications against k-means, streaming versions of it, and other algos and have been delivering comparable results (accuracy) but are 500 - 1000x the speed on a single CPU core. We are also in the process of porting to FPGA, both with Xilinx (Zinq) and Altera (Arria 10). We are currently applying our algo to a medical imaging solution as well as a computer vision application in streaming video, leveraging a Linux environment and some OpenCV preprocessing. From a methodology perspective, we are breaking down high resolution images into multiple smaller windows (say a 1080x720 into 4,800 smaller pixel regions) and conducting clustering on them. Our runtime on a single core of an Intel i5 is 20 microseconds/vector with very few false positives. One of our applications in OpenCV running HD video on a go pro stream was able to maintain runtime at 50fps without degrading performance, even after the cluster count grew well past 400 clusters (think Autonomous driving). I think this might be something you would be interested in. Let me know if you'd like to discuss further. [email protected]