Dưới đây là nỗ lực của tôi sử dụng ImageJ:
// Open the Image
ImagePlus image = new ImagePlus(filename);
// Make the Image 8 bit
IJ.run(image, "8-bit", "");
// Apply a Threshold (0 - 50)
ByteProcessor tempBP = (ByteProcessor)image.getProcessor();
tempBP.setThreshold(0, 50, 0);
IJ.run(image, "Convert to Mask", "");
// Analyze the Particles
ParticleAnalyzer pa = new ParticleAnalyzer(
ParticleAnalyzer.SHOW_MASKS +
ParticleAnalyzer.IN_SITU_SHOW,
1023 +
ParticleAnalyzer.ELLIPSE
, rt, 0.0, 999999999, 0, 0.5);
IJ.run(image, "Set Measurements...", "bounding fit redirect=None decimal=3");
pa.analyze(image);
int k = 0;
double maxSize = -1;
for (int i = 0; i < rt.getCounter(); i ++) {
// Determine creteria for best oval.
// The major axis should be much longer than the minor axis.
// let k = best oval
}
double bx = rt.getValue("BX", k);
double by = rt.getValue("BY", k);
double width = rt.getValue("Width", k);
double height = rt.getValue("Height", k);
// Your angle:
double angle = rt.getValue("Angle", k);
double majorAxis = rt.getValue("Major", k);
double minorAxis = rt.getValue("Minor", k);
Làm thế nào mã hoạt động:
- Làm cho hình ảnh grayscaled.
- Áp dụng ngưỡng trên đó để chỉ nhận được các vùng tối. Điều này giả định các dòng sẽ luôn luôn gần đen.
- Áp dụng Máy phân tích hạt để tìm Hình elip trên hình ảnh.
- Lặp qua "Hạt" để tìm những phần phù hợp với tiêu chí của chúng tôi.
- Lấy góc từ Hạt của chúng tôi.
Dưới đây là một ví dụ về nội dung bức ảnh trông giống như khi tôi phân tích nó:
LƯU Ý: Mã này là chưa được kiểm tra. Tôi chỉ chuyển đổi những gì tôi đã làm trong Visual ImageJ thành Java.
Bạn đã xem xét ImageJ chưa? – Ivan
Hãy xem [Biến đổi Hough] (http://en.wikipedia.org/wiki/Hough_transform). – Maurits