二维数据转扇形图像的通用算法:适用于雷达、B型超声等扇形扫描设备
【摘要】 很久以前,帮一位在读硕士研究生写过一个B型超声设备的图像处理算法,顺便把思路记录整理后发了一篇博客。没想到这么冷门的一篇文章却经常被读者朋友翻出来,并留言希望我能帮助处理一些细节性的问题。深入了解之后才发现,原来雷达数据处理也面临同样的问题,都需要将二维的扇形扫描数据转成扇形图像,也就是实现下图所示的转换。
以上面这张雷达扫描图为例,完整的扇形图像生成代码如下...
很久以前,帮一位在读硕士研究生写过一个B型超声设备的图像处理算法,顺便把思路记录整理后发了一篇博客。没想到这么冷门的一篇文章却经常被读者朋友翻出来,并留言希望我能帮助处理一些细节性的问题。深入了解之后才发现,原来雷达数据处理也面临同样的问题,都需要将二维的扇形扫描数据转成扇形图像,也就是实现下图所示的转换。
以上面这张雷达扫描图为例,完整的扇形图像生成代码如下。
# -*- coding:utf-8 -*-
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
def outimg(fn_squ, fn_fan, angle, r0=0, k=2, top=True,rotate=0): """将矩形图像转为环形 fn_squ - 输入文件名,不支持灰度图像文件 fn_fan - 输出文件名 angle - 环形夹角度数 r0 - 环形内圆半径,r0=0输出扇形 k - 临近点插值密度(如果图像上出现白噪点,可适当增加k值) top - 环心在上部 rotate - 旋转角度,正数表示逆时针旋转,负数表示顺时针旋转 """ im_pil = Image.open(fn_squ) # 打开输入图像 im = np.array(im_pil) # 转为NumPy数组 h, w, d = im.shape # 输入图像的高度、宽度和通道数 if r0 > 0: # 输出环形的话,图像上部增加白色背景 bg = np.ones((r0, w, d), dtype=np.uint8) im = np.append(bg, im, axis=0) if top else np.append(im, bg, axis=0) h, w, d = im.shape # 加上背景后图像的高度、宽度和通道数 r = 2*h-1 # 输出图像高度和宽度 im_fan = np.zeros((r, r, d), dtype=np.uint8) # 生成输出图像的numpy数组(全透明) idx = np.arange(h) if top else np.arange(h)[::-1] alpha = np.radians(np.linspace(-angle/2, angle/2, k*w)) # 生成扇形角度序列 for i in range(k*w): # 遍历输入图像的每一列 rows = np.int32(np.ceil(np.cos(alpha[i])*idx)) + r//2 cols = np.int32(np.ceil(np.sin(alpha[i])*idx)) + r//2 im_fan[(rows, cols)] = im[:,i//k] if 360 > angle > 180: # 裁切输出图像上部的空白区域 im_fan = im_fan[int(h*(1-np.sin(np.radians((angle/2-90))))):] if not top: im_fan = im_fan[::-1] im_out = Image.fromarray(im_fan, mode=im_pil.mode) if(os.path.exists(fn_fan)):#如果图像已存在就先删除 os.remove(fn_fan) im_out.save(fn_fan) # 保存为文件 #图像旋转(这个在正式工程中需要根据雷达图像起始(非转台起始角)的方位角来定) img = Image.open(fn_fan) dst = img.rotate(rotate) dst.save(fn_fan) print("图像已处理完并保存") # 绘图 plt.figure('B超扇扫', facecolor='#f4f4f4', figsize=(15, 7)) plt.subplot(121) plt.imshow(im) plt.subplot(122) plt.imshow(im_fan) plt.savefig('out_plt.png') plt.show() if __name__ == '__main__': outimg('demo.png', 'out.png', angle=180, r0=1, k=200, top=False)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
文章来源: xufive.blog.csdn.net,作者:天元浪子,版权归原作者所有,如需转载,请联系作者。
原文链接:xufive.blog.csdn.net/article/details/118609098
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)