景深合成是对显微镜头连续变焦时采集的非平面物体的图像序列进行分析,提取序列里每一帧图像中聚焦相对清晰的区域,然后对这些区域按其位置进行聚焦清晰度竞争、图像融合,形成一幅新的各区域都清晰的全景深的图像。
这里算法的前提是图像大小需要一致,算法核心是对于图像进行一系列滤波,然后比较每张图像相同坐标处的像素值。
这里声明了几个变量,ImMer是最终合成的图像,coll是中间处理的变量,Coll_Ori是保存原图像数据的变量,dstWidth目标图像宽度(一般都是与原始图像大小一致)。
private Mat ImMer;
private Mat[] coll;
private Mat[] Coll_Ori;
private int dstWidth = 0;
这里指定了一个文件夹读取多张图像,这里面的CvtColor,是因为整体框架是BGRA的,而读取的时候没有,这里可以不转,但是后面的DefineProfileForEachAsVec4b方法就需要修改。如果有人参考使用可以酌情处理。
Mat[] mats = new Mat[4];
string picsPath = "D:\\Project\\图像\\景深\\金属表面";
DirectoryInfo root = new DirectoryInfo(picsPath);
int i = 0;
foreach (FileInfo f in root.GetFiles())
{Mat mat = new Mat(f.FullName);mats[i] = mat.CvtColor(ColorConversio