mirror of
https://github.com/NanjingForestryUniversity/supermachine-tobacco.git
synced 2025-11-08 22:33:54 +00:00
测试图像偏移程度和队列补偿程序测试未完成
This commit is contained in:
parent
5085fdbf1e
commit
54dd39daa8
34
README.md
34
README.md
@ -129,7 +129,13 @@
|
|||||||
|
|
||||||
引入了RGB和光谱图像的原因,这里牵扯到图像对齐的问题。
|
引入了RGB和光谱图像的原因,这里牵扯到图像对齐的问题。
|
||||||
|
|
||||||
这里可以看到对齐的结果:
|
### 对齐检测算法
|
||||||
|
|
||||||
|
理论大概是这样,但是这不重要啦,简单来说就是偏差平面里头计算响应强度,这是当时的草稿。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
实现以后这里可以看到对齐的结果,算法实现在`main_test.py`里头的`calculate_delta()`:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -143,3 +149,29 @@
|
|||||||

|

|
||||||
|
|
||||||
这张图片里的上下偏差则达到了2.6厘米左右。
|
这张图片里的上下偏差则达到了2.6厘米左右。
|
||||||
|
|
||||||
|
### 图像拍摄脉冲触发问题
|
||||||
|
|
||||||
|
2022年7月30日我们进行了二次实验,本来以为会得到一个恒定的偏差结果,但是,情况并不像我们想的那样:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
从这张图可以看到,两张图的偏差大概是上下10像素,RGB偏上,左右偏差19像素,RGB偏左,
|
||||||
|
|
||||||
|
但是!RGB图像明显是扭曲的,这显然是由于触发导致的。
|
||||||
|
|
||||||
|
从其他图片来看:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
明显也存在图像扭曲的情况,偏差情况是:
|
||||||
|
|
||||||
|
这张图上下已经对不上了,用它计算的偏差不具备参考价值。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
偏差的影响,也可从这幅图当中看到,这幅图的上下偏差达到了惊人的200像素,明显考虑是触发有问题了,不然偏差值至少是恒定的。
|
||||||
|
|
||||||
|
结论是考虑RGB相机的触发存在一定问题。
|
||||||
|
|||||||
13
main_test.py
13
main_test.py
@ -70,7 +70,7 @@ class TestMain:
|
|||||||
print(delta)
|
print(delta)
|
||||||
self.merge(rgb_img=rgb_img, rgb_mask=rgb_mask,
|
self.merge(rgb_img=rgb_img, rgb_mask=rgb_mask,
|
||||||
spec_img=spec_img[..., [21, 3, 0]], spec_mask=spec_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):
|
def test_rgb(self, rgb_img, img_name):
|
||||||
rgb_mask = self._rgb_detector.predict(rgb_img)
|
rgb_mask = self._rgb_detector.predict(rgb_img)
|
||||||
@ -93,13 +93,14 @@ class TestMain:
|
|||||||
return spec_mask
|
return spec_mask
|
||||||
|
|
||||||
@staticmethod
|
@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 = (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)
|
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)
|
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[0, 0].imshow(rgb_img)
|
||||||
axs[1, 0].imshow(spec_img)
|
axs[1, 0].imshow(spec_img)
|
||||||
|
axs[1, 0].set_title(spec_file_name)
|
||||||
axs[2, 0].imshow(mask_result)
|
axs[2, 0].imshow(mask_result)
|
||||||
axs[0, 1].imshow(rgb_mask)
|
axs[0, 1].imshow(rgb_mask)
|
||||||
axs[1, 1].imshow(spec_mask)
|
axs[1, 1].imshow(spec_mask)
|
||||||
@ -107,7 +108,7 @@ class TestMain:
|
|||||||
plt.show()
|
plt.show()
|
||||||
return mask_result
|
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_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)
|
_, 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)
|
_, spec_bin = cv2.threshold(spec_grey, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
|
||||||
@ -161,5 +162,5 @@ class TestMain:
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
testor = TestMain()
|
testor = TestMain()
|
||||||
testor.pony_run(test_path=r'/Volumes/LENOVO_USB_HDD/zhouchao/728-tobacco/correct',
|
testor.pony_run(test_path=r'/Volumes/LENOVO_USB_HDD/zhouchao/0730saved_img/correct',
|
||||||
test_rgb=True, test_spectra=True, get_delta=False)
|
test_rgb=True, test_spectra=True, get_delta=True)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user