(ImagePlus imp)
| 545 | } |
| 546 | |
| 547 | void createEllipse(ImagePlus imp) { |
| 548 | if (!imp.okToDeleteRoi()) return; |
| 549 | IJ.showStatus("Fitting ellipse"); |
| 550 | Roi roi = imp.getRoi(); |
| 551 | if (roi==null) |
| 552 | {noRoi("Fit Ellipse"); return;} |
| 553 | if (roi.isLine()) |
| 554 | {IJ.error("Fit Ellipse", "\"Fit Ellipse\" does not work with line selections"); return;} |
| 555 | ImageProcessor ip = imp.getProcessor(); |
| 556 | ip.setRoi(roi); |
| 557 | int options = Measurements.CENTROID+Measurements.ELLIPSE; |
| 558 | ImageStatistics stats = ImageStatistics.getStatistics(ip, options, null); |
| 559 | double dx = stats.major*Math.cos(stats.angle/180.0*Math.PI)/2.0; |
| 560 | double dy = - stats.major*Math.sin(stats.angle/180.0*Math.PI)/2.0; |
| 561 | double x1 = stats.xCentroid - dx; |
| 562 | double x2 = stats.xCentroid + dx; |
| 563 | double y1 = stats.yCentroid - dy; |
| 564 | double y2 = stats.yCentroid + dy; |
| 565 | double aspectRatio = stats.minor/stats.major; |
| 566 | Undo.setup(Undo.ROI, imp); |
| 567 | imp.deleteRoi(); |
| 568 | Roi roi2 = new EllipseRoi(x1,y1,x2,y2,aspectRatio); |
| 569 | transferProperties(roi, roi2); |
| 570 | imp.setRoi(roi2); |
| 571 | } |
| 572 | |
| 573 | void convexHull(ImagePlus imp) { |
| 574 | if (!imp.okToDeleteRoi()) return; |
no test coverage detected