细胞识别图像处理项目总结

简介: 细胞识别图像处理项目总结

关于图像处理方面的收获:


五月中旬的时候接了个细胞检测的活,要求识别白细胞、红细胞、脂肪球、霉菌几种


细胞,大致看了客户发给我显微镜上的图片,发现能做,于是就接了下来,客户告诉


我最终的程序要是C++的编译成DLL给他们的应用程序调用才可以,本人因为一直做


Java,做C++还是12年前毕业设计的时候做了图像相关的东西。从那之后,做项目偶


尔也会搞点C++但是基本上就一直停留在Hello World的水平上。我的想法是先把算法


用Java实现,然后我找人合作帮忙把算法从Java翻译成C++,经过大概一个月左右的


时间Java版本的算法已经实现,并且用客户给我的那些测试图片数据,发现除了白细


胞识别率有点低,其它的识别都还不错,基本都在70%左右,而且阴性的检测准确率


高达96%,已经满足实际需要。其实做这个识别算法我是基于模板匹配方法,但是唯


一不同的时候我是先找到ROI区域,然后只对ROI区域去做模板匹配,这样速度就非常


快,基本满足了客户要求。在做这个项目的过程中,自己对一些基础的问题又有了近


一步的认知,对SMOOTH、先图像梯度在灰度还是先灰度在梯度的区别都有了新的认


知,发现顺序不同差别还是很大的,对图像二值化、二值图像的填充、腐蚀与膨胀、


开闭操作、边缘提取等都更加的熟悉了。同时对霍夫直线检测、二值图像的连通区域


查找等算法也有近一步的认识,在特征提取方面自己先后尝试了LBP、HOG、几何距


灰度共生矩阵等又温习和进一步理解应用。通过综合运用这些知识,基于提取到的模


板数据、实现了对细胞的快速分类与识别。


关于编程方面的收获:


我在学习图像处理之初,就下定决心不去依赖任何库,这样做有好处也有坏处,好处


就是逼着自己去实现一些常见的图像处理方法,坏处就工作效率比较低,特别是开始


阶段,我在用Java做这些算法的时候也特别注意借鉴ImageJ中的代码,能直接拿过来


用的,我基本都直接拿过来了,HOG是我自己用Java写的,因为ImageJ中我没发现


这个就导致我的Java算法在翻译到C++的时候有很多选择,可以用openCV等开源库


可以那些API我也没仔细看,心想找个人帮我翻译成C++的就好了,不需要任何库


毕竟我的Java版算法也是我自己实现的,不依赖任何库,我估计的时间是一周左右


我很幸运的找到一个很好的C++哥们,他也是CSDN的一个熟人,花了两周晚上的时


间我们把Java的算法转成C++的了,然后编译测试通过,改了几个小问题就发现运行


结果跟Java没有差别,这个让我很高兴,觉得帮我翻译C++的哥们太给力了,希望我


们一直合作下去。


        当然这个过程中我们也踩了不少坑,其中最大的一个就是我Java做的算法很多变


量都没有初始化为0,到了C++上面就悲剧了,还有一些数组也没有初始化就直接进行


像素或者统计操作,结果也很悲剧,都是很大的坑。费了我们不少精力。其中更有一


个很恶搞的问题,我定义的数字是字节类型的,结果里面的数据是INT的,长度就会溢


出,结果就很悲剧。我也学会一些简单的C++知识,学会用vs2015搞东西,学会了用


CxImage这个库来读图像文件和像素数据。复活了我一些VC++的知识。我记得我上次


用VC++的时候还是6.0,我这个跨度比较大。项目总结的时候那哥们还给我提几点建议


这样方面他把代码转到C++。一个很认真的哥们,他的建议:


对以后咱们合作中的Java代码提两点建议:


1.定义变量、数组时必须初始化。


2.逻辑层和视图层分离,算法中只传像素数组,


不要有BufferedImage对象及图像读定相关的操作,


这些都放到视图层。对图像的处理,其实就是对像素的处理。


那么处理函数的定义其实只需要传入一个待处理的像素数组,


返回一个处理后的结果像素数组。Java定义可以为:

public abstract int [] process( int[] pixs,int width, int height);

对应的c++定义为

virtual int process (EUINT32 * pSrcPix ,int nSrcW , int nSrcH , EUINT32 *& pDest , int & nDestW , int &nDestH ) = 0;

关于我们:


如果能在一起做事情,一定要相互信任,特别是经济上一定要相互讲清楚,只有这样


团队才会相互信任,才有可能一起做更多的事情。要让客户看到自己的努力,认可自


己的劳动,成功就不会太远了。现在我做Java,主攻图像处理的各种算法,他主攻


C++,我们相互是对方的老师和良师。就在这个项目结束的时候我们又接一个新的图


像处理的活,希望会一起走的更远。

相关文章
|
Rust 安全 数据挖掘
【颠覆常规】Rust科学计算革命:掌握数值分析与数据处理的全新利器,让你的工作事半功倍!
【8月更文挑战第31天】Rust语言凭借其出色的内存安全和高性能特性,在科学计算领域逐渐崭露头角。本文通过具体代码示例展示了Rust在数值计算与数据分析中的应用,包括矩阵乘法、统计分析及线性方程组求解。通过安装Rust并引入`ndarray`、`nalgebra`和`statrs`等库,读者可以轻松实现各类科学计算任务。Rust在科学计算领域的潜力巨大,未来可期。
728 1
|
机器学习/深度学习 数据可视化 算法
PACNet & CellNet(代码开源)|bulk数据作细胞分类,评估细胞命运性能的一大利器
PACNet和CellNet都是强大的工具,分别用于研究细胞命运工程和细胞类型保真度,它们在细胞类型分类和网络分析方面有所不同,可以根据研究需求选择合适的工具。
372 1
|
测试技术
【细胞识别】YOLOv8实现CBC细胞检测
【细胞识别】YOLOv8实现CBC细胞检测
226 0
|
11月前
|
机器学习/深度学习 人工智能 算法
《C++助力无监督学习:挖掘数据潜在结构的高效之道》
在无监督学习中,聚类分析与降维算法至关重要,它们能从未标记数据中发现隐藏结构。使用C++实现时,通过高效计算数据点相似度、优化K-Means算法初始化及采用随机化PCA等技术,可显著提升模型训练和评估的效率。C++的内存管理和多线程特性进一步增强了算法的性能,使其在数据挖掘、图像识别等领域发挥重要作用。
135 11
|
编解码 算法 数据挖掘
单细胞Seurat - 细胞聚类(3)
单细胞Seurat - 细胞聚类(3)
单细胞Seurat - 细胞聚类(3)
b站如何一次性把up主全部取消关注,让自己去学习
b站如何一次性把up主全部取消关注,让自己去学习
|
机器学习/深度学习 存储 自然语言处理
【论文解读】A review on the attention mechanism of deep learning
注意力已经成为深度学习中最重要的概念之一。本文旨在对近年来提出的最新注意力模型作概述。我们建立了一个较为通用的模型,此外根据四个标准即注意力的柔软性、输入特征的形式、输入表示和输出表示来对当前注意力模型进行分类。最后讨论了注意力在深度学习可解释上的作用。
1780 0
|
机器学习/深度学习 数据采集 Python
实战案例|金融行业客户流失预警模型~
大家好,我是志斌~ 今天跟大家分享一下逻辑回归模型在商业实战中的应用。
1194 0
实战案例|金融行业客户流失预警模型~
|
6天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。