自迁移出 MediaWiki 以来,本页内容尚未经过审查。如果您愿意帮忙,请查看帮助指南!
目的
IJBlob库识别二进制图像中的连接组件。用于局部标记的算法是:
Chang, F. (2004)。使用模拟追踪技术的线性时间最小标记算法。计算机和视觉图像理解,93(2), 206–220。 <doi:10.1016/j.cviu.2003.09.002>
连接的组件是由 8 个相邻域连接的一组像素组成,通常称为“显示”。一个例子:

上图包含8个标记的虹彩。两个B和O的孔(以及孔的单独)也被识别。还可以获得彩色标记图像:

另外 ijblob 还识别对象:

如果您在科学文献中使用IJBlob,请引用:
Wagner, T 和 Lipinski, H 2013。IJBlob:用于分区数量分析和形状分析的 ImageJ 库。开放研究软件杂志 1(1):e6,DOI:http://dx.doi.org/10.5334/jors.ae
Shape Filter插件使用ij-blob库通过形状来表征和过滤二进制场景中的对象。因此,计算出几个特征,如下所示。
IJBlob 的特点
- 过滤器框架
- 提取每个再现的外部图标。
- 还提取每个显示屏(孔)的所有内部结构。
- 检测对象(出现在中的显示屏)。
- 许多形状特征
形状特征
- 区域 (\(A\)):由对象的外部包围的区域。
- 区域凸包 (\(C\)):物体构造外部的凸包所包围的区域。
- 周长 (\(P\)):物体外部虚拟的周长。
- 周长凸包 (\(H\)):强制凸包的周长。
- 费雷特直径:在所有方向上接触颗粒物的转弯平行切线之间的最大距离。
- 最小。费雷特直径:在所有方向上接触颗粒的转弯切线之间的最小距离。
- 最大。因斯克。圆直径:最大内切圆的直径。
- 长边边界最大化:边界最小化的增量边。
- 短边最小化:最小化最小化的边。
- 纵横比:定义为\(L/S\)
- 面积周长比:定义为\(A/P\)
- 循环度:定义为\(P^{2}/A\)
- 伸长率:定义为\(1 - S/L\)
- 凸性:定义为\(H/P\)
- 加固性:定义为\(A/C\)
- 孔数:物体内部的孔数。
- 细度比:与圆度成反比。此外它还规范了。它被定义为 \(4\pi A/P^{2}\)
- 等值线温度:它与分形维数有优势的关系,定义为\(\left(log_{2}\left(\frac{2P}{P-H}\right)\right)^{-1}\)
- 方向:以梯度为单位的旋转方向(从正x轴逆时针测量)。
- 分形盒维数:通过盒推测算法估计分形维数。默认盒子大小为“2,3,4,6,8,12,16,32,64”。
例子
示例 1:将图像提取出来并读取显示的周长
import ij.blob.*;
...
private ManyBlobs allBlobs;
...
public void someMethod(ImagePlus imp) {
ManyBlobs allBlobs = new ManyBlobs(imp); // Extended ArrayList
allBlobs.setBackground(0); // 0 for black, 1 for 255
allBlobs.findConnectedComponents(); // Start the Connected Component Algorithm
allBlobs.get(0).getPerimeter(); // Read the perimeter of a Blob
}
示例 2:示例 2:按 Blob 特征过滤 Blob
在 IJBlob 1.1 中引入了过滤器框架。每个内置 blob 功能都有一个静态标识符(在本例中为“GETENCLOSEDAREA”),其中包含方法名称。
import ij.blob.*;
...
private ManyBlobs allBlobs;
...
public void someMethod(ImagePlus imp) {
/* Extended ArrayList */
ManyBlobs allBlobs = new ManyBlobs(imp);
/* Start the Connected Component Algorithm */
allBlobs.findConnectedComponents();
/* Return all blobs with an area between 20 and 100 pixel² */
ManyBlobs filteredBlobs = allBlobs.filterBlobs(20,100,
Blob.GETENCLOSEDAREA);
}
示例 3:添加您自己的功能
IJBlob 1.1 可以通过您自己必须的功能轻松扩展。首先,您从“CustomBlobFeature”类派生一个要素类。要素类还可以包含多个要素。使用“getBlob()”方法,您可以获得对 Blob 的引用,并可以完全访问数据和其他功能。 请注意:如果您的功能方法将原始数据类型(int/float/double)作为参数,则必须使用包装类(Integer/Float/Double)。
import ij.blob.*;
public class ExampleBlobFeature extends CustomBlobFeature {
public double myFancyFeature(Integer a, Float b){
double feature = b*getBlob().getEnclosedArea()*a;
return feature;
}
public int mySecondFancyFeature(Integer a, Double b){
int feature = (int)(b*getBlob().getAreaToPerimeterRatio() *a);
return feature;
}
}
示例 4:将检测到的溶液添加到 ROI 管理器
查找所有显示器:
ManyBlobs allBlobs = new ManyBlobs(imp);
allBlobs.findConnectedComponents();
ROI管理器:
Frame frame = WindowManager.getFrame("ROI Manager");
if (frame == null)
IJ.run("ROI Manager...");
frame = WindowManager.getFrame("ROI Manager");
RoiManager roiManager = (RoiManager) frame;
将外部转换为ROI并将其添加到ROI管理器中:
for (int i = 0; i < allBlobs.size(); i++) {
Polygon p = allBlobs.get(i).getOuterContour();
int n = p.npoints;
float[] x = new float[p.npoints];
float[] y = new float[p.npoints];
for (int j=0; j<n; j++) {
x[j] = p.xpoints[j]+0.5f;
y[j] = p.ypoints[j]+0.5f;
}
Roi roi = new PolygonRoi(x,y,n,Roi.TRACED_ROI);
Roi.setColor(Color.green);
roiManager.add(imp, roi, i);
}
谁用过这个插件?
这是使用 ijblob / shape 过滤器插件的书籍列表:
库尔巴卡,J.,库尔巴基,M.,塞根,J.,乔达切克,G.,杜宾斯卡-马吉拉,M.,&萨克兹科,J.(2016)。通过CLSM图像自动分析细胞核泄漏。计算机科学中的智能信息和数据库系统讲义,407-416。 <doi:10.1007/978-3-662-49390-8_40>
Ullrich, M.、Haša, J.、Hanuš, J.、Šoóš, M. 和 Štěpánek, F. (2016)。通过碱体的受控聚集形成多室颗粒。粉末技术,295, 115-121。 <doi:10.1016/j.powtec.2016.03.021>
Kuleesha, Y.、Puah, W. C.、Lin, F. 和 Wasser, M. (2014)。 FMAj:果蝇变态解剖动力学高关联分析工具。 BMC 生物信息学,15(增刊 16)。 <doi:10.1186/1471-2105-15-s16-s6>
Cinquin,B.,Maigre,L.,Pinet,E.,Chevalier,J.,斯塔文格,R.A.,米尔斯,S.,。。帕格斯,J.(2015)。关于单个细菌细胞水平上抗生素吸收的显着微光谱分析。科学。科学报告,5,17968。<doi:10.1038/srep17968>
Starborg, T.、Kalson, N.S.、Lu, Y.、Mironov, A.、Cootes, T. F.、Holmes, D. F. 和 Kadler, K. E. (2013)。使用阳台电子支架和 3View 确定纤维素纤维尺寸和三维组织。Nat Protoc 自然协议,8(7), 1433-1448。<doi:10.1038/nprot.2013.086>