Opencv 基础(四):使用OpenCV进行图像旋转和平移

人工智能53

Opencv 基础(四):使用OpenCV进行图像旋转和平移
如今,图像编辑变得越来越流行,因为手机有内置的功能,可以让你 裁剪、旋转和更多的操作你的图像。

这篇文章中,我们将探索和学习这些图像编辑技术。具体来说,我们将学习如何:

  • 旋转图像
  • 移动图像

; 基本图像变换操作

图像旋转和平移是图像编辑中最基本的操作之一。两者都属于广义的仿射变换。因此,在学习更复杂的转换之前,你应该首先学习旋转和平移图像,使用OpenCV中可用的函数。看看下面的图片,我们将在这里的所有转换示例中使用它。
Opencv 基础(四):使用OpenCV进行图像旋转和平移
让我们先看看下面的代码,它将用于使用OpenCV执行图像旋转。
Python

import cv2

image = cv2.imread('image.jpg')

height, width = image.shape[:2]

center = (width/2, height/2)

rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=45, scale=1)

rotated_image = cv2.warpAffine(src=image, M=rotate_matrix, dsize=(width, height))

cv2.imshow('Original image', image)
cv2.imshow('Rotated image', rotated_image)

cv2.waitKey(0)

cv2.imwrite('rotated_image.jpg', rotated_image)

C++

#include
#include
using namespace cv;

int main(int, char**)
{
    Mat image = imread("image.jpg");
      imshow("image", image);
      waitKey(0);
      double angle = 45;

      Point2f center((image.cols - 1) / 2.0, (image.rows - 1) / 2.0);

      Mat rotation_matix = getRotationMatrix2D(center, angle, 1.0);

      Mat rotated_image;

      warpAffine(image, rotated_image, rotation_matix, image.size());
      imshow("Rotated image", rotated_image);

      waitKey(0);

      imwrite("rotated_im.jpg", rotated_image);

      return 0;
}

使用OpenCV进行图像旋转

通过定义一个变换矩阵 M,你可以将图像旋转一个特定的角度θ。这个矩阵通常是这样的:
Opencv 基础(四):使用OpenCV进行图像旋转和平移
OpenCV提供了为图像定义旋转中心的能力,以及一个缩放因子来调整图像的大小。在这种情况下,变换矩阵如下。
Opencv 基础(四):使用OpenCV进行图像旋转和平移
在上述矩阵中:
Opencv 基础(四):使用OpenCV进行图像旋转和平移
其中c x c_x c x ​和c y c_y c y ​是图像旋转所沿的坐标。

OpenCV提供了 getRotationMatrix2D()函数来创建上面的转换矩阵。
以下是创建2D旋转矩阵的语法:

getRotationMatrix2D(center, angle, scale)

getRotationMatrix2D()函数接受以下参数:

  • center:图像的旋转中心:
  • angle: 旋转角度:
  • scale :一个各向同性的比例因子,根据提供的值将图像向上或向下缩放

如果 angle是正的,图像将逆时针方向旋转。如果你想顺时针旋转图像相同的量,那么角度需要是负的。

旋转分为三步操作:
1. 首先,你需要得到旋转的中心。这通常是你要旋转的图像的中心。
2. 接下来,创建2d旋转矩阵。OpenCV提供了我们在上面讨论过的 getRotationMatrix2D()函数。
3. 最后,使用在上一步中创建的旋转矩阵对图像应用仿射变换。 OpenCV中的 warpAffine()函数完成这项工作。

warpAffine()函数的作用是:对图像应用一个仿射变换。在进行仿射变换后,原图像中所有的平行线在输出图像中也保持平行。

warpAffine()的完整语法如下所示

warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]])

下面是函数的参数:

  • src:原图
  • M:变换矩阵
  • dsize:输出图像的大小
  • dst:输出图像
  • flags: 插值方法的组合如INTER_LINEAR或INTER_NEAREST
  • borderMode:像素扩展方法
  • borderValue:在边界不变的情况下使用的值,默认值为0

注意:你可以在这里了解更多关于OpenCV 仿射转换的信息

旋转后的图片
Opencv 基础(四):使用OpenCV进行图像旋转和平移

; 使用OpenCV平移图像

在计算机视觉中,图像的平移意味着沿着x轴和y轴移动指定数量的像素。设图像需要移动的像素为tx和ty,则可以定义一个平移矩阵M:
Opencv 基础(四):使用OpenCV进行图像旋转和平移
现在,在通过tx和ty值移动图像时,有几点你应该记住。

  • 为tx提供正值将使图像向右移动,而负值将使图像向左移动。
  • 同样,ty值为正值时,图像会向下平移,而ty值为负值时,图像会向上平移。

按照以下步骤使用OpenCV平移图片:

  • 首先读取图像,获得图像的宽度和高度。
  • 接下来,像旋转一样,创建一个变换矩阵,这是一个2D数组。这个矩阵包含沿x轴和y轴移动图像所需的信息。
  • 同样,在旋转中,在最后一步中使用 warpAffine()函数来应用仿射转换。

仔细阅读这段代码,看看它有多简单:

Python

import cv2
import numpy as np

image = cv2.imread('image.jpg')

height, width = image.shape[:2]

C++

#include "opencv2/opencv.hpp"
using namespace cv

Mat image = imread("image.jpg");

int height = image.cols;
int width = image.rows;

在上面的代码块中,您读取图像并获得其高度和宽度。
接下来,创建 平移矩阵

Python


tx, ty = width / 4, height / 4

translation_matrix = np.array([
    [1, 0, tx],
    [0, 1, ty]
], dtype=np.float32)

C++


float tx = float(width) / 4;
float ty = float(height) / 4;

float warp_values[] = { 1.0, 0.0, tx, 0.0, 1.0, ty };
Mat translation_matrix = Mat(2, 3, CV_32F, warp_values);

对于平移矩阵,如上所述,您将需要tx和ty。在本例中,您使用宽度和高度的四分之一作为平移值。我们建议您尝试不同的值并研究它们的输出。

现在,使用warpAffine()函数将平移矩阵应用到图像上,就像对旋转所做的那样。

Python


translated_image = cv2.warpAffine(src=image, M=translation_matrix, dsize=(width, height))

C++


Mat translated_image;

warpAffine(image, translated_image, translation_matrix, image.size());

注意: warpAffine()是一个通用函数,可以用于对图像应用任何类型的仿射变换。只要适当地定义矩阵M。

最后的代码块将显示转换后的图像,并将其写入磁盘。

Python


cv2.imshow('Translated image', translated_image)
cv2.imshow('Original image', image)
cv2.waitKey(0)

cv2.imwrite('translated_image.jpg', translated_image)

C++


imshow("Translated image", translated_image);
imshow("Original image", image);
waitKey(0);

imwrite("translated_image.jpg", translated_image);

下图显示了平移后的图像。
Opencv 基础(四):使用OpenCV进行图像旋转和平移

Original: https://blog.csdn.net/weixin_38346042/article/details/122595084
Author: @BangBang
Title: Opencv 基础(四):使用OpenCV进行图像旋转和平移



相关阅读1

Title: python中的队列使用

一、python队列在数据结构算法类应用:

Python标准库中包含了四种队列,分别是 queue.Queue / asyncio.Queue / multiprocessing.Queue / collections.deque

Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。

还有一种常用,也是我觉得最好用的是deque,双边队列

Opencv 基础(四):使用OpenCV进行图像旋转和平移

相比于list实现的队列,deque实现拥有更低的时间和空间复杂度。list实现在出队(pop)和插入(insert)时的空间复杂度大约为O(n),deque在出队(pop)和入队(append)时的时间复杂度是O(1)。

所以deque更有优越性 而且deque既可以表示队列 又可以表示栈 实在是太方便了。

除了C、java中常见的函数外,支持in操作符、rotate(1)、rotate(-1)、copy()、extend()、extendleft()、index()、insert()、remove()、reverse。

举个例子:

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。

双端队列的做法:

class Solution:
    def exchange(self, nums: List[int]) -> List[int]:
        tmp = collections.deque()
        for num in nums:
            tmp.appendleft(num) if num % 2 ==1 else tmp.append(num)
        return list(tmp)

再举个实现单调队列的例子:

请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。

若队列为空,pop_front 和 max_value 需要返回 -1

示例 1:
输入:
["MaxQueue","push_back","push_back","max_value","pop_front","max_value"]
[[],[1],[2],[],[],[]]
输出: [null,null,null,2,1,2]

示例 2:
输入:
["MaxQueue","pop_front","max_value"]
[[],[],[]]
输出: [null,-1,-1]
#单调栈写法
#均摊时间复杂度是O(1)
import queue
class MaxQueue:

    def __init__(self):
        self.dq = queue.deque()
        self.q = queue.Queue()

    def max_value(self) -> int:
        return self.dq[0] if self.dq else -1

    def push_back(self, value: int) -> None:
        while self.dq and self.dq[-1] < value:
            self.dq.pop()
        self.dq.append(value)
        self.q.put(value)

    def pop_front(self) -> int:
        if self.q == []: return -1
        ans = self.q.get()
        if ans == self.dq[0]:
            self.dq.popleft()
        return ans

二、python队列在线程间交换数据应用

当我做单调队列的时候,遇到过一个问题:

import queue
q = queue.Queue()
if q:
    ans = q.get()
    print(ans)

这段程序结果竟然是死循环,或者说一直被阻塞(后来才知道)

这个问题和上面有点相似:Queue.get()默认的也是阻塞方式读取数据,队列为空时,不会抛出 except Queue.Empty ,而是进入阻塞直至超时。

想要解决这个问题, 必须加上block=False 的参数

同理,Queue.put()默认有 block = True 和 timeout 两个参数。

如下代码的结果并不是10个A,而是会混杂B。

import Queue
       q = Queue.Queue(10)
       for i in range(10):
               myData = 'A'
               q.put(myData)
               myData = 'B'

当 block = True 时,写入是阻塞式的,阻塞时间由 timeout 肯定。正由于阻塞,才致使了后来的赋值污染了处于阻塞状态的数据。Queue.put()方法加上 block=False 的参数,便可解决这个隐蔽的问题。但要注意,非阻塞方式写队列,当队列满时会抛出 exception Queue.Full 的异常。

Original: https://www.cnblogs.com/cs-markdown10086/p/15993990.html
Author: NEU_ShuaiCheng
Title: python中的队列使用

相关阅读2

Title: 《kaldi语音识别实战》阅读笔记:单音素模型训练—train_mono.sh解析

一、使用说明

1.1 描述

训练单音素模型。

steps/train_mono.sh
Usage: steps/train_mono.sh [options] <data-dir> <lang-dir> <exp-dir>
main options (for others, see top of script file)
  --config <config-file>
  --nj <nj>
  --cmd (utils/run.pl|utils/queue.pl <queue opts>)

<data-dir></data-dir>:输入训练数据路径数据的路径。
<lang-dir></lang-dir>:输入语言目录的路径。
<exp-dir></exp-dir>:输出模型目录的路径,一般为 exp/mono

aishell调用实例
Opencv 基础(四):使用OpenCV进行图像旋转和平移

1.2 步骤


gmm-init-mono

compile-train-graph

align-equal-compiled

gmm-acc-stats-ali

gmm-est

for i < iteration

    gmm-acc-stats-ali

    gmm-est

    gmm-align-compiled

final.mdl = $i.md

实例
Opencv 基础(四):使用OpenCV进行图像旋转和平移
Opencv 基础(四):使用OpenCV进行图像旋转和平移
训练时gmm-est进行高斯分量的分裂,可通过totgauss来控制最大高斯分量个数。

二、部分阶段详细介绍

2.1 模型初始化

gmm-init-mono
Initialize monophone GMM.

Usage: gmm-init-mono <topology-in> <dim> <model-out> <tree-out>
e.g.: gmm-init-mono topo 40 mono.mdl mono.tree

将topo文件和声学特征维度作为输入,则会生成初始声学模型。不需要输入任何训练数据,进初始化一个基础模型。且生成的模型中每个状态只有一个高斯分量。后续训练会将单高斯分量分裂为多高斯分量。
其中1.3中, --shared-phones可以让某些音素共享相同的pdf,默认为空。 --train-feats可以提供也可以不提供,如果提供,则可以让模型利用训练数据来统计其均值和方差使得初始化模型的参数有一个更好的训练起点。

2.2 训练

包括初始的构图、对齐、更新参数,迭代的对齐、更新参数。
介绍三个工具:
gmm-align

gmm-align
Align feature given GMM-based models.

Usage: gmm-align [options] tree-model-in lexicon-fst-in feature-rspecifier transcroptions-rspecifier alignments-wspecifier
e.g.:
gmm-align tree 1.mdl lex.fst scp:train.scp 'ark:sym2int.pl -f 2- words.txt text|' ark:1.ali

根据输入的声学模型及对应的Tree和L.fst文件,将声学特征和文本进行对齐,并声称ALI文件。
其中kaldi提供gmm-align-compiled工具,是gmm-align的简化版,其使用预先构建好的对齐状态图,而gmm-align在线构建对齐状态图。
gmm-acc-stats-ali

gmm-acc-stats-ali
Accumulate stats for GMM training.

Usage: gmm-acc-stats-ali [options] <model-in> <feature-rspecifier> <alignments-rspecifier> <stats-out>
e.g.: gmm-acc-stats-ali 1.mdl scp:train.scp ark:1.ali 1.acc

输入初始模型、训练数据及对应的对齐结果,输出用于GMM参数更新的ACC文件。ACC文件储存了GMM在EM训练中需要的统计量。
gmm-est
用来更新GMM参数得到新模型,完成一次迭代。
如有问题或建议欢迎私信。
严禁私自转载,侵权必究
参考:
[1] 《kaldi语音识别实战》[book]
[2] kaldi HMM-GMM全部训练脚本分解 [博客园]

Original: https://blog.csdn.net/weixin_42069606/article/details/123950663
Author: v-space
Title: 《kaldi语音识别实战》阅读笔记:单音素模型训练—train_mono.sh解析

相关阅读3

Title: 基于产生式的动物识别专家系统_海洋技术一种多源信息融合的声呐综合目标识别方法...

点击上方 "溪流之海洋人生"即可订阅哦

声呐目标识别是基于声呐装备发现目标的前提下,声呐操作员依据声呐装备探测目标信息,利用图谱分析、听音识别、运动要素分析等综合信息判明目标属性的过程,可以说声呐目标识别也是声呐装备后置数据处理的重要环节。完成水下目标识别的关键是利用目标的不变特征。

迄今为止,国内外有关水下目标识别的报道多属依据目标谱结构,但由于先验资料不足,致使这种方式的识别实施具有较大的难度。对于回声信号而言,要想依据谱结构去识别更是难以实现。因此,寻求利用潜艇外相特征而识别潜艇的方法是本文所提及方法的核心。

目标分类识别是模式识别的一个分支。水声目标的分类识别目前主要有2种技术:一种是利用目标声信号的统计特性,建立专家系统进行分类识别;另一种是近年来发展起来的基于神经网络的分类识别系统。其各有优缺点,可以相互补充。水声目标分类识别的复杂性使识别技术的总趋势朝综合识别方向发展,就是采用数据融合的方式将各种可以利用的知识综合起来,除系统提供的识别信息以外,还要考虑位置因素、人的因素和各种先验知识等,最后作出判断。

目标分类识别一般包括特征提取和分类判决2个阶段,首先是从采集到的信号中提取特征,然后根据所提取的特征进行分类。可见,对目标的分类识别首要条件是要获得良好的目标信号,从中提取目标特征。否则,目标的分类识别准确度就会下降。

本文提出声呐综合目标识别方法,综合运用声呐探测回波特征信息、频谱信息、音频信息、目标运动要素信息、雷达信息等战场态势信息及情报信息进行识别,达到快速、准确识别目标。综合目标识别的一个重要理念,就是建立声呐目标特征数据库,将不同数据源、多年历史和未来采集的数据"整合",形成一个有组织的便于分析挖掘的数据环境。把大数据运用理念引入水声目标识别将为水中目标识别、作战辅助决策提供数据支撑和信息支撑。

一、声呐目标特征

目标的不变特征是目标本身固有的本质特征,是目标在某一状态下所呈现的稳定特性。目标的不变特征可由目标的内相特征和外相特征组成。目标的内相特征是指目标的声谱结构;目标的外相特征是指目标的外形、速度等。重点围绕声呐探测的目标对象特性研究,提出声呐目标综合识别方法,进而建立声呐目标特征数据采集标准。

⒈潜艇目标强度

潜艇的发射声波来自潜艇外剖面的镜面反射,以及来自潜艇外壳和耐压壳体结构及其后结构的反射或散射。对于潜艇目标强度,正横方位上声反射强度最强,首尾方向目标强度最弱,声反射强度测量结果呈"蝴蝶图",如图1所示。

1 潜艇目标强度对方位角依赖性的 " 蝴蝶 "

若将潜艇的柱形耐壳体近似为圆柱体,则可以对潜艇目标强度进行估计。

垂直于柱轴入射:

TS=10lg(aL_2/2 _λ) ⑴

与法线成 _θ_角入射:

TS=10lg(aL_2/2 _λ)+20lg(x-1sin x)×+20lg(cos θ) ⑵

式中: TS_为圆柱体目标强度; _a_为圆柱体半径; _L_为圆柱体长度; _θ_为与法线夹角; _x=(2π a/ λ)sin θ

⒉舰艇辐射噪声

舰艇辐射噪声谱具有连续性,或称为连续谱,谱上叠加有窄带离散分量,通常简称为线谱。舰艇水下辐射噪声可简化为周期信号 pT(t)(时域级数叠加的形式)和非周期信号 p(t)两部分的叠加:

式中,F[]表示傅氏变换。

⒊声呐目标特性获取

声呐用于感知海洋环境中的目标信息,主要包括:

⑴舰艇辐射噪声特征及被动声呐系统;

⑵舰艇声反射特征及主动声呐系统;

⑶浅海/深海海洋环境测量。

声呐探测的目标方位信息、距离信息、径向速度信息、频谱信息和音频信息,为被动声呐、主动声呐探测识别、目标运动要素解算等提供了实测手段支撑。

⒋声呐目标特征组成

声呐目标类型主要分为回声目标和噪声目标2种类型。声呐目标声信号特征体系,揭示了与潜艇目标螺旋桨桨数、桨叶数、尺度/吨位、外形、结构、目标外部材质、目标行为等属性相关联的辐射声、散射声两大类声信号精细特征形成机理、模型和规律。声呐探测目标回波特征、辐射噪声特性与目标尺度/吨位及特定机械周期运动、螺旋桨、目标外形、目标内部结构及材质、目标行为特征、声场干涉/畸变、听觉感知等相关的回声和辐射噪声信号密切相关。

声呐目标识别是基于声呐装备发现目标的前提下,声呐操作员依据声呐装备探测目标信息,采取图谱分析、听音识别、目标运动要素等判明目标属性的过程。在声呐装备自动目标识别水平和能力还很有限的情况下,提出目标特征信息深度挖掘提取的方法,采取回波特征信息、频谱信息、音频信息、目标运动要素信息、雷达信息等信息进行综合识别的作战使用样式,成为提升声呐目标识别正确率的重要手段。因此,声呐目标特征信息深度提取、声呐操作员目标综合识别的人机结合识别方式是促进声呐目标识别正确率提升的有效途径,声呐目标识别信息源组成如图2所示。

2 声呐目标识别信息源组成图

二、声呐目标综合识别方法

要提高目标识别能力,应以信息技术为推动,进行"全系统、全流程、全要素"的综合识别,运用多种技术手段进行目标识别,提升目标识别的水平。本文提出一种多信息源融合声呐目标综合识别方法。声呐目标识别需要指挥员及声呐操作员综合运用声呐探测回波特征信息、频谱信息、音频信息、目标运动要素信息、雷达信息等战场态势信息及情报信息,通过排除法和印证法相互查证,才能快速、准确识别目标,从而提高声呐目标识别正确率。

⒈水面 / 水下目标识别

首先利用雷达或AIS信息通过排除法排除水面目标(包括搜索编队的队员舰、商船、钢质渔船等),初步确定目标为水下目标。

⒉左右舷识别

对于舰壳声呐,设备在技术上即可判别目标左右舷;对于拖曳线列阵声呐,若是三元阵,从技术上,目前有采用每个阵元含有3个水听器的三元组线列阵、采用矢量水听器、采用双拖、主被动的方式等来解决,可自动判别目标左右舷。对于一维拖曳线列阵,往往存在左右模糊现象。所谓目标左右舷模糊问题,即当发现目标时,无法肯定目标是处在本舰的左舷还是右舷。这是由于线列阵上的水听器是无指向性的,这是一维拖曳线列阵被动声呐的一个不足。为了解决这个问题,从战术上,一般采取本舰的一定机动措施来观测目标方位的变化情况,才能做出对目标舷角的判断。

根据本舰转向机动后目标舷角相对原舷角的变化规律判别左右舷,可以依据以下的判决原则:

⑴本舰向左转向:目标舷角增大,目标在右舷;目标舷角减小,目标在左舷。

⑵本舰向右转向:目标舷角增大,目标在左舷;目标舷角减小,目标在右舷。

⑶对于由多途效应引起的目标方位模糊问题,则可以通过舰艇机动将目标置于舷侧波束内,然后按前述2条准则进行判决。

对于一维拖曳线列阵声呐发现目标时,利用窄带检测判明其类型后本舰应立即机动转向,判别目标的舷侧。机动的方法是:首先根据目标可能的来袭方向假设其位于本舰的某一舷,然后向另一舷侧方向转向并观察目标方位的变化情况,判断其左右舷。

⒊运动目标识别

通过反潜系统解算目标航向、航速等运动要素或检查目标有无明显机械噪声、螺旋桨噪声、偶发脉冲等特征确定目标是运动目标或非运动目标。通常主动声呐输出仅有方位和距离2个参量。将距离方位的参量输出经过解算后可得出目标的长度、速度和目标强度。

当在某一距离档连续给出 R_1和 _R_2时,相应的方位 _φ_1和 _φ_2,由于某个距离档的扫描时间一定,例如为 _t(s),则潜艇的速度为:

径向速度:

V_r=(_R_1- _R_2)/ _t

切向速度:

V_t=(_φ_2- _φ_1)/ _t

对地速度:

V=(_V_t+ _V_r) ⑹

依据主动声呐方程:

SLNL-2 TLTSGSGTM

式中: _SL_为发射声源级; _TL_为背景噪声级; _TS_为目标强度; _GS_为阵的空间增益; _GT_为后置处理的时间增益。

在检测过程中,接收的信号余量为 M,则 _TS_表示如下:

TSMGSGTSLNL+2 TL

M=10lg(_A_2/ _N_2) ⑼

式中: _A_2为有信号时的能量; _N_2为无信号时的噪声能量。

根据主动声呐判型的依据和目标谱图显示,结合搜索舰战术机动,反潜火控系统解算出的目标航向、航速等参数判明目标属性并掌握目标的运动态势。对被动声呐而言,可利用目标的"螺旋桨拍"确定目标的螺旋桨转数并估算目标航速。

⒋金属目标识别

通过海图对海底山坡、海沟、暗礁、凸起峰的准确位置进行标识,对目标反射特征和反射系数确定目标为金属目标或非金属目标。

⒌目标特征识别

初始空段落:通过检查海底是否有沉船来确定目标是否为坐沉海底的潜艇,沉船由于沉没时间长短关系,表层会吸附不同厚度的海生物,对目标的反射系数和回声、回波、谱图特征与潜艇区别较为明显。

实际使用当中,对于有经验的声呐操作员来说,可以从LOFAR图上所含有的信息中找出有助于运动目标的识别与分析。如在某个波束上某个目标最强;哪个目标有多普勒频移,这表明该目标有一定的运动速度或航迹发生变化;通过线谱的频率可识别目标等。

⒍多途目标识别

对主动声呐而言,平坦海底或良好水文条件下往往多途干扰较少,但对于斜坡海底、起伏海底或恶劣水文条件下,声传播多途效应变得严重,引起声呐杂波点较多,需要杂波背景中准确识别出目标。

搜索编队或其他舰艇在标定的位置点不能同时发现目标时,要考虑目标是否为由于本舰声呐发射声波经过多次反射发现的其他远距离海域的目标,此时可以变换一下声呐量程或信号处理形式进行检测识别。声呐目标综合识别流程如图3所示。

3 多信息源融合的声呐目标综合识别流程图

准确判明目标属性,最有效的方法就是进行多信息源查证识别,声呐操作员通过声呐信息、运动要素信息、雷达信息等,依据目标显示特征、回声特征、噪声特征、谱图显示特征、海区声场环境进行有效的识别判型。

三、声呐目标特征数据采集标准

首先,通过建立声纳目标数据采集标准,逐步完善目标特性数据库,进而开展目标特性数据获取和积累,以便利用排除法和数据查询匹配法,最终有效解决声呐目标识别问题。

水声目标数据汇集工作量巨大,除了需要采集目标声和非声数据外,还需要通过纸质或者电子值更日志记录各种相关的态势、状态、环境等信息,任务结束还需搜集相关的雷达、情报等信息,要花费大量精力进行数据整编汇集。通过建立声呐目标数据采集标准,作战数据、态势数据、情报数据、雷达数据、AIS 数据等都全时采集并汇入数据库,在后期进行数据分析时,即可自动从数据库关联搜集时空匹配的其他同步信息,声呐操作员仅需重点记录目标的声和非声数据即可,与数据同步的其他相关信息需要记录的将大大减少。

四、结语

通过多信息源融合的综合目标识别方法,可将碎片化式、分散的、孤立的数据融合起来,从而转化成信息优势,形成标准的识别流程,提高声呐目标识别正确率。

【作者简介】文章作者/梁民赞 孟华 陈遥沛 曾翔,均来自91388 部队;第一作者梁民赞,1981年出生,男,工程师,主要研究方向为水声探测;文章来自《舰船科学技术》(2019年第8期),参考文献略,用于学习与交流,版权归作者及出版社共同拥有,文中部分图片系我平台加载,转载也请备注由"溪流之海洋人生"微信公众平台整理。

相关阅读推荐

海洋军事▏从寂静中听声:声呐探测与声隐身海洋技术▏海底声学探测技术装备综述声学技术▏海洋声学目标探测技术研究现状海洋论坛▏国外潜艇用声呐发展综述外军透析▏美军神秘水下侦听系统的前世今生水声技术▏国外声呐技术研究现状与发展趋势

公众号

溪流之海洋人生

微信号▏xiliu92899

用专业精神创造价值
用人文关怀引发共鸣
您的关注就是我们前行的动力

投稿邮箱▏ 12163440@qq.com

Original: https://blog.csdn.net/weixin_39669629/article/details/111332534
Author: weixin_39669629
Title: 基于产生式的动物识别专家系统_海洋技术一种多源信息融合的声呐综合目标识别方法...