diff --git a/lumen_profiler.py b/lumen_profiler.py index 2e6bfb5..36f583a 100644 --- a/lumen_profiler.py +++ b/lumen_profiler.py @@ -7,7 +7,7 @@ class LumenProfiler: def __init__(self): - self.area_ratio = 0.08 + pass def load_movie(self, filename): self.frames = [] @@ -21,11 +21,11 @@ self.frame_count = len(self.frames) cap.release() - def profiling(self, step=1): + def profiling(self, area_ratio, step=1): self.results = [] for idx in range(0, len(self.frames), step): frame = self.frames[idx] - mask = self.lumen_mask(frame) + mask = self.lumen_mask(frame, area_ratio) circle_level, contour = self.calc_circle_level(mask) result = { "idx": idx, @@ -33,13 +33,14 @@ "mask": mask, "circle_level": circle_level, "contour": contour, - "ratio": self.area_ratio, + "ratio": area_ratio, } self.results.append(result) def draw(self, rid): disp = self.results[rid]["frame"].copy() etime = self.results[rid]["idx"] * 1.0 / 30.0 + ratio = self.results[rid]["ratio"] cv2.putText( disp, "frame%4d time %.3fs" % (self.results[rid]["idx"], etime), @@ -51,7 +52,7 @@ ) cv2.putText( disp, - "area ratio=%.1f %%" % (self.area_ratio * 100), + "area ratio=%.1f %%" % (ratio * 100), (10, 50), cv2.FONT_HERSHEY_TRIPLEX, 0.7, @@ -72,7 +73,7 @@ return disp - def lumen_mask(self, frame, sigma=5.0, min_area=200): + def lumen_mask(self, frame, area_ratio, sigma=5.0, min_area=200): # 輝度画像生成 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) val_img = hsv[:, :, 2] @@ -83,7 +84,7 @@ sum = 0 for i in range(0, 256): sum += hist[i] - if thres < 0 and sum > (val_img.size * self.area_ratio): + if thres < 0 and sum > (val_img.size * area_ratio): thres = i break # 気道のマスク生成 @@ -169,7 +170,7 @@ # 解析 lp = LumenProfiler() lp.load_movie(movie_file) - lp.profiling(2) + lp.profiling(0.08, 2) lp.csv_output("output/analysis.csv") # 表示