def bleb_area(membrane_edge, midpoint_anchor): """calculate the area of the drawn bleb, accounting for membrane crossing line joining anchors""" poly = membrane_edge.getFloatPolygon() xs = [x for x in poly.xpoints] ys = [y for y in poly.ypoints] rotangle = membrane_edge.getAngle(int(round(xs[0])), int(round( ys[0])), int(round(xs[-1])), int(round(ys[-1]))) / 180 * math.pi rotY = [(x * math.sin(rotangle) + y * math.cos(rotangle)) for x, y in zip(xs, ys)] rotYmpa = midpoint_anchor[0] * math.sin( rotangle) + midpoint_anchor[1] * math.cos(rotangle) meanRotY = sum(rotY) / len(rotY) seg1 = rotY[:int(round(len(rotY) / 2))] seg1.reverse() seg2 = rotY[int(round(len(rotY) / 2)):] if rotYmpa > rotY[0]: idx1 = len(seg1) - seg1.index(min(seg1)) idx2 = int(round(len(rotY) / 2)) + seg2.index(min(seg2)) else: idx1 = len(seg1) - seg1.index(max(seg1)) idx2 = int(round(len(rotY) / 2)) + seg2.index(max(seg2)) area_poly_xs = xs[idx1:idx2 + 1] area_poly_ys = ys[idx1:idx2 + 1] len_roi = PolygonRoi(area_poly_xs, area_poly_ys, Roi.POLYLINE) length = len_roi.getLength() area_roi = PolygonRoi(area_poly_xs, area_poly_ys, Roi.POLYGON) area = area_roi.getStatistics().area #print(area); return length, area, area_roi
membrane_indices_available = [ membrane['position number'] for membrane in membranes ] for membrane_index in membrane_indices_available: print("Analysing frame " + str(frame_idx) + ", membrane_index = " + str(membrane_index)) membrane_xy_list = membranes[membrane_indices_available.index( membrane_index)]['roi'] roi = PolygonRoi([x for x, y in membrane_xy_list], [y for x, y in membrane_xy_list], Roi.FREELINE) imp.setRoi(roi) roi.setStrokeWidth(line_width) if line_width > 1: IJ.run(imp, "Line to Area", "") roi = imp.getRoi() stats = roi.getStatistics() output.append((t, membrane_index, stats.mean, stats.max, stats.min, stats.median, stats.stdDev)) imp.killRoi() print(output) # save output to csv csv_path = os.path.join(os.path.dirname(edges_file_path), "intensity_stats.csv") f = open(csv_path, 'wb') try: writer = csv.writer(f) writer.writerow([ "Time, s", "Membrane index", "Mean intensity", "Max intensity", "Min intensity", "Median intensity", "Std intensity" ])