mirror of
https://github.com/NanjingForestryUniversity/supermachine-tobacco.git
synced 2025-11-08 14:23:55 +00:00
图块拼接BetaTest
This commit is contained in:
parent
1a19246dc3
commit
5085fdbf1e
18
README.md
18
README.md
@ -125,3 +125,21 @@
|
|||||||
| 识别结果 |  |
|
| 识别结果 |  |
|
||||||
| 模型约束情况 |  |
|
| 模型约束情况 |  |
|
||||||
|
|
||||||
|
## 图像的对齐
|
||||||
|
|
||||||
|
引入了RGB和光谱图像的原因,这里牵扯到图像对齐的问题。
|
||||||
|
|
||||||
|
这里可以看到对齐的结果:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
根据这张图片的换算结果可以得知光谱图像比RGB图像超前了69个像素,大概2.02厘米的样子。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
根据这张图片,可以得知,图像上下偏差是2.3厘米
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
这张图片里的上下偏差则达到了2.6厘米左右。
|
||||||
|
|||||||
@ -30,5 +30,9 @@ class Config:
|
|||||||
threshold_s = 175
|
threshold_s = 175
|
||||||
rgb_size_threshold = 4
|
rgb_size_threshold = 4
|
||||||
|
|
||||||
# Mask parameter
|
# mask parameter
|
||||||
target_size = (1024, 1024) # (Width, Height) of mask
|
target_size = (256, 1024) # (Width, Height) of mask
|
||||||
|
|
||||||
|
# save part
|
||||||
|
offset_vertical = -70
|
||||||
|
|
||||||
|
|||||||
34
main.py
34
main.py
@ -25,12 +25,17 @@ def main():
|
|||||||
os.mkfifo(rgb_fifo_path, 0o777)
|
os.mkfifo(rgb_fifo_path, 0o777)
|
||||||
if not os.access(mask_fifo_path, os.F_OK):
|
if not os.access(mask_fifo_path, os.F_OK):
|
||||||
os.mkfifo(mask_fifo_path, 0o777)
|
os.mkfifo(mask_fifo_path, 0o777)
|
||||||
if not os.access(rgb_mask_fifo_path, os.F_OK):
|
|
||||||
os.mkfifo(rgb_mask_fifo_path, 0o777)
|
# 进行补偿buffer的开启
|
||||||
|
if Config.offset_vertical < 0:
|
||||||
|
# 纵向的补偿小于0,那就意味着光谱图要上移才能补上,那么我们应该补偿SPEC相机的全 0 图像
|
||||||
|
conserve_part = np.zeros((abs(Config.offset_vertical) // 4, Config.nRows, Config.nBands))
|
||||||
|
elif Config.offset_vertical > 0:
|
||||||
|
# 纵向的补偿小于0,说明光谱图下移才能补上去,那么我们就需要补偿RGB相机的全 0 图像
|
||||||
|
conserve_part = np.zeros(abs(Config.offset_vertical), Config.nRgbRows, Config.nRgbBands)
|
||||||
while True:
|
while True:
|
||||||
fd_img = os.open(img_fifo_path, os.O_RDONLY)
|
fd_img = os.open(img_fifo_path, os.O_RDONLY)
|
||||||
fd_rgb = os.open(rgb_fifo_path, os.O_RDONLY)
|
fd_rgb = os.open(rgb_fifo_path, os.O_RDONLY)
|
||||||
|
|
||||||
# spec data read
|
# spec data read
|
||||||
data = os.read(fd_img, total_len)
|
data = os.read(fd_img, total_len)
|
||||||
if len(data) < 3:
|
if len(data) < 3:
|
||||||
@ -40,7 +45,6 @@ def main():
|
|||||||
else:
|
else:
|
||||||
data_total = data
|
data_total = data
|
||||||
os.close(fd_img)
|
os.close(fd_img)
|
||||||
|
|
||||||
# rgb data read
|
# rgb data read
|
||||||
rgb_data = os.read(fd_rgb, total_rgb)
|
rgb_data = os.read(fd_rgb, total_rgb)
|
||||||
if len(rgb_data) < 3:
|
if len(rgb_data) < 3:
|
||||||
@ -51,23 +55,34 @@ def main():
|
|||||||
else:
|
else:
|
||||||
rgb_data_total = rgb_data
|
rgb_data_total = rgb_data
|
||||||
os.close(fd_rgb)
|
os.close(fd_rgb)
|
||||||
|
|
||||||
# 识别
|
# 识别
|
||||||
t1 = time.time()
|
t1 = time.time()
|
||||||
img_data = np.frombuffer(data_total, dtype=np.float32).reshape((Config.nRows, Config.nBands, -1)) \
|
img_data = np.frombuffer(data_total, dtype=np.float32).reshape((Config.nRows, Config.nBands, -1))\
|
||||||
.transpose(0, 2, 1)
|
.transpose(0, 2, 1)
|
||||||
rgb_data = np.frombuffer(rgb_data_total, dtype=np.uint8).reshape((Config.nRgbRows, Config.nRgbCols, -1))
|
rgb_data = np.frombuffer(rgb_data_total, dtype=np.uint8).reshape((Config.nRgbRows, Config.nRgbCols, -1))
|
||||||
|
if Config.offset_vertical < 0:
|
||||||
|
# 纵向的补偿小于0,那就意味着光谱图要上移才能补上,那么我们应该补偿SPEC相机的全 0 图像
|
||||||
|
new_conserve_part, real_part = img_data[:abs(Config.offset_vertical) // 4, ...],\
|
||||||
|
img_data[abs(Config.offset_vertical) // 4:, ...]
|
||||||
|
img_data = np.concatenate([real_part, conserve_part], axis=0)
|
||||||
|
conserve_part = new_conserve_part
|
||||||
|
elif Config.offset_vertical > 0:
|
||||||
|
# 纵向的补偿小于0,说明光谱图下移才能补上去,那么我们就需要补偿RGB相机的全 0 图像
|
||||||
|
new_conserve_part, real_part = rgb_data[:abs(Config.offset_vertical), ...],\
|
||||||
|
rgb_data[abs(Config.offset_vertical):, ...]
|
||||||
|
rgb_data = np.concatenate([real_part, conserve_part], axis=0)
|
||||||
|
conserve_part = new_conserve_part
|
||||||
# 光谱识别
|
# 光谱识别
|
||||||
mask_spec = spec_detector.predict(img_data)
|
mask_spec = spec_detector.predict(img_data)
|
||||||
# rgb识别
|
# rgb识别
|
||||||
mask_rgb = rgb_detector.predict(rgb_data)
|
mask_rgb = rgb_detector.predict(rgb_data)
|
||||||
# 结果合并
|
# 结果合并
|
||||||
# mask_result = (mask_spec | mask_rgb).astype(np.uint8)
|
mask_result = (mask_spec | mask_rgb).astype(np.uint8)
|
||||||
|
|
||||||
# control the size of the output masks
|
# control the size of the output masks
|
||||||
masks = [cv2.resize(mask.astype(np.uint8), Config.target_size) for mask in [mask_spec, mask_rgb]]
|
masks = [cv2.resize(mask.astype(np.uint8), Config.target_size) for mask in [mask_spec, mask_rgb]]
|
||||||
# 写出
|
# 写出
|
||||||
output_fifos = [mask_fifo_path, rgb_mask_fifo_path]
|
output_fifos = [mask_fifo_path, ]
|
||||||
for fifo, mask in zip(output_fifos, masks):
|
for fifo, mask in zip(output_fifos, masks):
|
||||||
fd_mask = os.open(fifo, os.O_WRONLY)
|
fd_mask = os.open(fifo, os.O_WRONLY)
|
||||||
os.write(fd_mask, mask.tobytes())
|
os.write(fd_mask, mask.tobytes())
|
||||||
@ -82,7 +97,6 @@ if __name__ == '__main__':
|
|||||||
rgb_fifo_path = "/tmp/dkrgb.fifo"
|
rgb_fifo_path = "/tmp/dkrgb.fifo"
|
||||||
|
|
||||||
mask_fifo_path = "/tmp/dkmask.fifo"
|
mask_fifo_path = "/tmp/dkmask.fifo"
|
||||||
rgb_mask_fifo_path = "/tmp/dkmask_rgb.fifo"
|
|
||||||
# 主函数
|
# 主函数
|
||||||
main()
|
main()
|
||||||
# read_c_captures('/home/lzy/2022.7.15/tobacco_v1_0/', no_mask=True, nrows=256, ncols=1024,
|
# read_c_captures('/home/lzy/2022.7.15/tobacco_v1_0/', no_mask=True, nrows=256, ncols=1024,
|
||||||
|
|||||||
1
utils.py
1
utils.py
@ -140,7 +140,6 @@ def size_threshold(img, blk_size, threshold):
|
|||||||
return mask
|
return mask
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
color_dict = {(0, 0, 255): "yangeng", (255, 0, 0): "bejing", (0, 255, 0): "hongdianxian",
|
color_dict = {(0, 0, 255): "yangeng", (255, 0, 0): "bejing", (0, 255, 0): "hongdianxian",
|
||||||
(255, 0, 255): "chengsebangbangtang", (0, 255, 255): "lvdianxian"}
|
(255, 0, 255): "chengsebangbangtang", (0, 255, 255): "lvdianxian"}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user