基于K 您所在的位置:网站首页 数码迷彩分类图表 基于K

基于K

2024-06-24 19:26| 来源: 网络整理| 查看: 265

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 前言一、数码迷彩二、K-means算法提取主色三、python算法实现1、在IDE中导入需要的库2、K-means聚类提取主色3、生成迷彩斑块4、数码迷彩的生成 参考文献

前言

提示:本文主要是根据西安工业大学喻钧教授的论文——仿造数码迷彩的设计方法,来复现了一种根据目标背景图像生成仿造数码迷彩的设计方法。首先将背景图案进行颜色空间转换,采用K均值聚类分析方法提取背景主色。由侦测距离确定数码单元的最小尺寸,最后生成数码迷彩斑块。

提示:以下是本篇文章正文内容,下面案例可供参考

一、数码迷彩

伪装技术总是通过各种巧妙的伪装手段进行隐真示假, 以蒙蔽敌方的侦察. 迷彩作为最常用的一种伪装方式, 是一种保障军事实力、 对抗现代侦察探测与精确制导武器捕获的重要手段. 然而, 普通迷彩的视觉区分度强, 仅适于对抗固定距离或一定范围内、低分辨率的光学侦察, 难以对付不同距离下的高分辨率航空和卫星成像侦察. 而由计算机生成的数码迷彩(也叫数字迷彩) 则克服了这一缺陷, 能够有效地应对不同距离以及高精度、 高分辨率的空间侦察. 它通过不同色块的多种排列组合, 利用空间混色原理使色块相互渗透模拟背景的颜色和纹理特征, 以达到与背景融合的目的。 最初的数码迷彩设计通常将已有的普通迷彩图案直接转换成细碎的数码方块图案, 其重点在于对不同颜色间边缘的处理. 这样生成的数码迷彩在伪装效果上有一定的改善和提高, 但由于没有反映目标背景的颜色、 纹理等信息, 还算不上真正意义上的数码迷彩.仿造迷彩是模仿背景斑块图案的多色迷彩, 主要用于伪装多色背景上的固定目标或长时间停留的活动目标. 本文借助数字图像处理技术, 通过提取自然背景的主色、 斑块等特征信息, 设计了以像素点阵为基本单元且能反映背景斑块特征的仿造数码迷彩图案。

二、K-means算法提取主色

这个看我的上一篇文章:基于python的K-means聚类提取图片主色

三、python算法实现 1、在IDE中导入需要的库 import cv2 import numpy as np from skimage import io from sklearn.cluster import KMeans import matplotlib.pyplot as plt 2、K-means聚类提取主色

将输入的图像进行k-means聚类操作,提取三种主要的背景颜色。将提取的三种背景主色分布用不同的标签标记。

#####################图像转换到Lab空间+背景主色提取######################## #利用k-means聚类算法提取背景图的主色 img=cv2.imread("cao3.jpg") img=cv2.medianBlur(img, 3) [m0,n0,q0]=img.shape #规范尺寸方便后续操作 img_rgb=cv2.resize(img,(120,120)) [m,n,q]=img_rgb.shape k=3 img_lab = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2LAB) #cv2.imshow('Lab',img_lab) #io.imsave('img_lab.jpg', img_lab) img1 = img_lab.reshape((img_lab.shape[0] * img_lab.shape[1], img_lab.shape[2])) #构建聚类器 kmeans=KMeans(n_clusters=k,max_iter=4000, init='k-means++', n_init=50) kmeans.fit(img1)#聚类 lab=kmeans.labels_#获取聚类标签 label=lab.reshape([m,n])#将聚类结果转换成图像大小的矩阵 #获取聚类中心(背景主色) centroids = kmeans.cluster_centers_ centroids = centroids.astype(np.uint8) label1=np.array(label,dtype=np.float64) label1=cv2.resize(label1,(n0,m0)) plt.figure(0) plt.subplot(221),plt.imshow(label1,cmap='gray'),plt.title('label') 3、生成迷彩斑块

根据背景图像中主体颜色的亮度分布情况提取图像中斑点的形状和空间分布特征

s=3 for i in range(0,m,s): for j in range(0,n,s): sumi=0 for x in range(i,i+s): for y in range(j,j+s): sumi=label[x,y]+sumi meani=round(sumi/(s*s)) for x in range(i,i+s): for y in range(j,j+s): label[x,y]=meani img_lab2=np.zeros_like(img_lab) for i in range(m): for j in range(n): if label[i,j]==0: img_lab2[i,j]=centroids[0] elif label[i,j]==1: img_lab2[i,j]=centroids[1] elif label[i,j]==2: img_lab2[i,j]=centroids[2] img_lab2=cv2.resize(img_lab2,(n0,m0)) img_rgb2=cv2.cvtColor(img_lab2, cv2.COLOR_LAB2BGR) 4、数码迷彩的生成

最后展示生成的数码迷彩结果: 在这里插入图片描述

参考文献

喻钧,双晓.仿造数码迷彩的设计方法[J].应用科学学报,2012,30(04):331-334.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有