news 2026/4/3 10:39:59

一种基于旋转二值轮矩阵的(边缘提取算法),能够大致保留原本图形信息(包括颜色),同时计算速度很快,因为是AI完善的,所以仍有缺点:内部仍有一些非图形轮廓信息没有被清除掉

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一种基于旋转二值轮矩阵的(边缘提取算法),能够大致保留原本图形信息(包括颜色),同时计算速度很快,因为是AI完善的,所以仍有缺点:内部仍有一些非图形轮廓信息没有被清除掉

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>二值轮矩阵粗轮廓提取工具</title>

<style>

body {text-align:center;font-family:Arial;margin:20px;}

canvas {border:2px solid #333;margin:10px auto;display:block;background:#fff;}

button {padding:8px 20px;font-size:16px;cursor:pointer;background:#4CAF50;color:white;border:none;border-radius:4px;}

button:hover {background:#45a049;}

.container {width:800px;margin:0 auto;}

</style>

</head>

<body>

<div class="container">

<h3>原图(多边形+圆形混合)</h3>

<canvas id="original" width="400" height="300"></canvas>

<h3>粗彩色轮廓图(轮矩阵"甩"除内部)</h3>

<canvas id="outline" width="400" height="300"></canvas>

<button onclick="reset()">重置生成图形</button>

</div>

<script>

let oCtx = original.getContext('2d'), lCtx = outline.getContext('2d');

// 生成多边形+圆形混合图形

function drawRandomGraph() {

oCtx.clearRect(0,0,400,300);

// 随机多边形

for(let k=0;k<4;k++){

let n=3+Math.floor(Math.random()*5),x0=200+(Math.random()-0.5)*80,y0=150+(Math.random()-0.5)*80;

oCtx.beginPath();

for(let i=0;i<n;i++) oCtx.lineTo(x0+Math.cos(i/n*2*Math.PI)*(30+k*15),y0+Math.sin(i/n*2*Math.PI)*(30+k*15));

oCtx.closePath();

oCtx.fillStyle=`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})`;

oCtx.fill();

}

// 嵌入小圆形

for(let i=0;i<3;i++){

let r=15+Math.random()*10,x=150+Math.random()*100,y=100+Math.random()*100;

oCtx.beginPath();oCtx.arc(x,y,r,0,2*Math.PI);

oCtx.fillStyle=`rgb(${Math.random()*255},${Math.random()*255},${Math.random()*255})`;

oCtx.fill();

}

}

// 二值轮矩阵旋转"甩"动提取粗轮廓

function extractOutline() {

lCtx.clearRect(0,0,400,300);

let imgData=oCtx.getImageData(0,0,400,300),data=imgData.data,w=400,h=300;

// 轮矩阵:动态旋转中心,环形权重扩大边缘范围

function wheelMatrix(x,y,cx,cy,angle) {

let dx=x-cx, dy=y-cy;

let rotX=dx*Math.cos(angle)-dy*Math.sin(angle); // 矩阵旋转

let dist=Math.sqrt(rotX**2+dy**2);

return dist%10 < 4 ? 1 : 0; // 扩大权重范围实现粗轮廓

}

// 多轮旋转"甩"动,逐轮偏移中心

for(let round=0;round<5;round++){

let angle=round*Math.PI/4, cx=200+round*12, cy=150+round*8;

for(let y=0;y<h;y++)for(let x=0;x<w;x++){

let i=(y*w+x)*4;

if(!wheelMatrix(x,y,cx,cy,angle)) continue;

// 16邻域边缘检测,扩大范围实现粗线条

let isEdge=false;

for(let dy=-2;dy<=2;dy++)for(let dx=-2;dx<=2;dx++){

if(dx===0&&dy===0) continue;

let nx=x+dx, ny=y+dy;

if(nx>=0&&nx<w&&ny>=0&&ny<h){

let ni=(ny*w+nx)*4;

isEdge|=Math.abs(data[i]-data[ni])>15||Math.abs(data[i+1]-data[ni+1])>15||Math.abs(data[i+2]-data[ni+2])>15;

}

}

data[i+3]=isEdge?255:0; // 非边缘完全透明

}

}

lCtx.putImageData(imgData,0,0);

}

function reset(){drawRandomGraph();extractOutline();}

reset();

</script>

</body>

</html>

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 0:26:56

极坐标波束形成数据底跟踪算法详解

极坐标波束形成数据底跟踪算法详解 一、基本概念 1.1 底跟踪的定义 底跟踪&#xff08;Bottom Tracking&#xff09;是通过声学回波信号检测和跟踪海底位置的技术&#xff0c;主要用于&#xff1a; 测量船舶相对于海底的速度确定水深辅助水下导航定位补偿多普勒计程仪测量 …

作者头像 李华
网站建设 2026/3/27 9:52:52

【技术教程】TrustFlow 授权策略是怎么实现的?

打开链接即可点亮社区Star&#xff0c;照亮技术的前进之路。 Github 地址&#xff1a;https://github.com/secretflow/trustflow/ TrustFlow提供了一套简洁易懂的语法帮助用户对数据使用行为的授权进行描述。接下来我们会详细描述这套语法&#xff0c;并结合示例进行讲解。 …

作者头像 李华
网站建设 2026/4/1 21:54:31

丐版 OI 技巧 / 杂项部分总结 + 作者学习笔记

持久化区间修改区间查询线段树&#xff1a;SP11470 TTM - To the moon点击查看代码2. 有后效性的 dpCF24D Broken robot一般用高斯消元 求解。也可以多跑几遍朴素 dp 使误差降到可接受范围内。多跑几遍的代码3. P14402 [JOISC 2016] 危险的滑冰 / Dangerous Skating图论建模。思…

作者头像 李华
网站建设 2026/3/27 3:18:46

CBAM核查规则正式明确:这4类企业,2025年开始风险差距会被迅速拉开

一、CBAM真正进入“可核查阶段”&#xff0c;企业开始被分层随着欧盟正式公布 CBAM 两项关键核查法规草案&#xff08;授权法规 实施法规&#xff09;&#xff0c;CBAM 已经不再只是“填报义务”&#xff0c;而是进入可核查、可追责、可比较阶段。对中国出口企业来说&#xff…

作者头像 李华
网站建设 2026/3/26 15:36:24

AI 模型识别 Nginx 流量中爬虫机器人的防御机制

要实现基于AI模型识别Nginx流量中爬虫机器人的防御机制&#xff0c;核心思路是从Nginx流量中提取特征→训练AI模型区分爬虫/正常请求→将模型集成到Nginx中实时拦截。以下是分步骤的详细落地指南&#xff0c;从入门到实操&#xff0c;覆盖全流程&#xff1a; 一、先明确核心边界…

作者头像 李华
网站建设 2026/3/25 5:08:30

【Wolfram语言】20Ex 绘制洛书

引言 近日看到有关河图洛书的视频。我突发奇想,能否用目前所介绍的Wolfram语言来绘制一幅洛书呢? 起源 《周易》有云:“河出图,洛出书,圣人则之”。 传说上古有神龟从洛水出现,背负‘洛书’。 其图如下: 分析 粗看洛书是以黑点与白点排列成33矩阵。 因此可将九个数…

作者头像 李华