diff --git a/README.md b/README.md index c6915da..1a742c8 100644 --- a/README.md +++ b/README.md @@ -129,7 +129,13 @@ 引入了RGB和光谱图像的原因,这里牵扯到图像对齐的问题。 -这里可以看到对齐的结果: +### 对齐检测算法 + +理论大概是这样,但是这不重要啦,简单来说就是偏差平面里头计算响应强度,这是当时的草稿。 + +![截屏2022-07-30 09.23.13](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/%E6%88%AA%E5%B1%8F2022-07-30%2009.23.13.png) + +实现以后这里可以看到对齐的结果,算法实现在`main_test.py`里头的`calculate_delta()`: ![Figure_1](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/Figure_1.png) @@ -143,3 +149,29 @@ ![Figure_4](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/Figure_4.png) 这张图片里的上下偏差则达到了2.6厘米左右。 + +### 图像拍摄脉冲触发问题 + +2022年7月30日我们进行了二次实验,本来以为会得到一个恒定的偏差结果,但是,情况并不像我们想的那样: + +![截屏2022-07-30 09.18.15](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/%E6%88%AA%E5%B1%8F2022-07-30%2009.18.15.png) + + + +从这张图可以看到,两张图的偏差大概是上下10像素,RGB偏上,左右偏差19像素,RGB偏左, + +但是!RGB图像明显是扭曲的,这显然是由于触发导致的。 + +从其他图片来看: + +![截屏2022-07-30 09.19.28](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/%E6%88%AA%E5%B1%8F2022-07-30%2009.19.28.png) + +明显也存在图像扭曲的情况,偏差情况是: + +![截屏2022-07-30 09.41.34](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/%E6%88%AA%E5%B1%8F2022-07-30%2009.41.34.png)这张图上下已经对不上了,用它计算的偏差不具备参考价值。 + +![截屏2022-07-30 09.20.34](https://raw.githubusercontent.com/Karllzy/imagebed/main/img/%E6%88%AA%E5%B1%8F2022-07-30%2009.20.34.png) + +偏差的影响,也可从这幅图当中看到,这幅图的上下偏差达到了惊人的200像素,明显考虑是触发有问题了,不然偏差值至少是恒定的。 + +结论是考虑RGB相机的触发存在一定问题。 diff --git a/main_test.py b/main_test.py index 109ec0d..6a03238 100644 --- a/main_test.py +++ b/main_test.py @@ -70,7 +70,7 @@ class TestMain: print(delta) self.merge(rgb_img=rgb_img, rgb_mask=rgb_mask, spec_img=spec_img[..., [21, 3, 0]], spec_mask=spec_mask, - file_name=rgb_file_name) + rgb_file_name=rgb_file_name, spec_file_name=spec_file_name) def test_rgb(self, rgb_img, img_name): rgb_mask = self._rgb_detector.predict(rgb_img) @@ -93,13 +93,14 @@ class TestMain: return spec_mask @staticmethod - def merge(rgb_img, rgb_mask, spec_img, spec_mask, file_name): + def merge(rgb_img, rgb_mask, spec_img, spec_mask, rgb_file_name, spec_file_name): mask_result = (spec_mask | rgb_mask).astype(np.uint8) mask_result = mask_result.repeat(Config.blk_size, axis=0).repeat(Config.blk_size, axis=1).astype(np.uint8) fig, axs = plt.subplots(3, 2) - axs[0, 0].set_title(file_name) + axs[0, 0].set_title(rgb_file_name) axs[0, 0].imshow(rgb_img) axs[1, 0].imshow(spec_img) + axs[1, 0].set_title(spec_file_name) axs[2, 0].imshow(mask_result) axs[0, 1].imshow(rgb_mask) axs[1, 1].imshow(spec_mask) @@ -107,7 +108,7 @@ class TestMain: plt.show() return mask_result - def calculate_delta(self, rgb_img, spec_img, search_area_size=(200, 200), eps=1): + def calculate_delta(self, rgb_img, spec_img, search_area_size=(400, 200), eps=1): rgb_grey, spec_grey = cv2.cvtColor(rgb_img, cv2.COLOR_RGB2GRAY), cv2.cvtColor(spec_img, cv2.COLOR_RGB2GRAY) _, rgb_bin = cv2.threshold(rgb_grey, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) _, spec_bin = cv2.threshold(spec_grey, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) @@ -161,5 +162,5 @@ class TestMain: if __name__ == '__main__': testor = TestMain() - testor.pony_run(test_path=r'/Volumes/LENOVO_USB_HDD/zhouchao/728-tobacco/correct', - test_rgb=True, test_spectra=True, get_delta=False) + testor.pony_run(test_path=r'/Volumes/LENOVO_USB_HDD/zhouchao/0730saved_img/correct', + test_rgb=True, test_spectra=True, get_delta=True)