찾다
웹 프론트엔드JS 튜토리얼Javascript 이미지 처리 - matrices_javascript 기술에 일반적인 방법 추가

머리말
이전 기사에서는 행렬을 정의했습니다. 이번 기사에서는 행렬에 몇 가지 일반적인 방법을 추가하겠습니다.

toString 메소드
toString 메소드는 일반적으로 객체를 문자열 설명으로 변환하는 데 사용되므로 이 메소드를 출력 행렬 요소로 정의합니다.
코드 복사 코드는 다음과 같습니다.

Mat.prototype.toString = function() {
var tempData = this.data,
text = "Mat(" this.type ") = {n",
num = this.col *
for(var i = 0; i text = "["
for(var j = 0; j text = (tempData[i * num j] ",");
text = "]n"
text = "}"
return text; >
이런 식으로 다음을 전달할 수 있습니다.



코드 복사
코드는 다음과 같습니다. console.log( mat)
매트릭스를 출력합니다.


clone 메소드

실제로 생성자를 통해서도 cloning 작업을 수행할 수 있지만, 여전히 메모리와 사용을 용이하게 하는 메소드를 제공합니다.


코드 복사
코드는 다음과 같습니다. Mat.prototype.clone = function() { return new Mat(this.row, this.col, this.data) };


지정된 요소 가져오기

그것을 얻는 두 가지 방법 Matrix 요소.

배열 방식
Mat는 실제로 배열 형태로 데이터를 저장하기 때문에 데이터는 다음과 같습니다.
R00 G00 B00 A00 R01 G01 B01 A01… B0n A0n
R10 G10 B10 A10 R11 G11 B11 A11 … R1n G1n B1n A1n …… Rm0 Gm0 Bm0 Am0 Rm1 Gm1 Bm1 Am1 … B, A는 각각 각 채널의 값을 나타내며, 첫 번째 첨자는 행 번호, 두 번째 첨자는 열 번호를 나타냅니다. 즉, k행과 j열의 G 채널 값은 Gkj이다.
Mat 유형 매트의 경우 k번째 행과 j번째 열 픽셀의 각 요소는 다음과 같습니다.
Rkj = mat.data[(k * mat.col j) * 4 0 ]
Gkj = mat.data[(k * mat.col j) * 4 1]
Bkj = mat.data[(k * mat.col j) * 4 2]
Akj = mat . data[(k * mat.col j) * 4 3]


버퍼 부분 참조 방법

버퍼의 부분 참조를 통해 행렬의 부분 참조를 얻을 수 있으며, 이를 사용하여 픽셀 데이터 배열을 얻을 수 있으며, 이 배열의 값을 변경하면 해당 행렬 데이터도 변경됩니다. 다른 예에서는 다른 데이터 유형의 데이터를 읽을 수 있습니다. 이는 일반 배열로는 달성할 수 없습니다. at 메소드의 구현을 살펴보겠습니다:


코드 복사

코드는 다음과 같습니다. Mat.prototype.at = function(__type, __x, __y){ var type = __type, x = __x || 0, y = __y || 0,
rowLen = this.col * this.channel * this.bytes,
len = 1
if(type.indexOf("Vec") > -1){
var temp = __type.match(/ Vec(d )( [a-z])/);
len = parsInt(temp[1])
switch(temp[2]){
case "b":
type = " uchar";
break;
case "s":
type = "short";
break;
case "i":
type = "int";
break;
case "f":
type = "float";
case "d":
type = "double"
}
}
switch(type){
case "uchar":
return new Uint8Array(this.buffer, (y * rowLen x), len)
break
case; "short":
return new Int16Array(this.buffer, (y * rowLen x * 2), len)
break
case "int":
return new Int32Array(this.buffer , (y * rowLen x * 4), len);
break;
case "float":
return new Float32Array(this.buffer, (y * rowLen x * 4), len); 🎜>break;
case "double":
return new Float64Array(this.buffer, (y * rowLen x 8), len)
break;
console. error("지원되지 않는 데이터 유형");
}
};
ArrayBuffer 및 TypedArray에 대해 명확하지 않은 경우 HTML5의 새로운 배열을 참조하세요.
문자열 유형 - 반환할 데이터 유형입니다. 지원:
uchar 부호 없는 8비트 정수
짧은 부호 있는 16비트 정수
int 부호 있는 32비트 정수
부동 부호 있는 32비트 부동 소수점
이중 부호 있는 64비트 부동 소수점 숫자

Vec 벡터 형식
벡터 형식 문자열의 철자는 Vec(유형)(숫자)입니다. 예를 들어 Vecb4는 부호 없는 8비트 정수 4개가 일반적입니다. 예를 들어 mat의 j행과 k열의 픽셀 데이터를 얻으려면 다음을 사용하세요.
코드 복사 코드는 다음과 같습니다.

mat.at("Vecb4", j, k)

int x - 행 수 얻을 요소의 매트릭스에서.
int y - 얻을 요소의 행렬에 있는 열 수입니다.

getRow 메소드 및 getCol 메소드
at의 구현 메소드와 유사하게 특정 행이나 열을 가져오는 메소드를 쉽게 작성할 수 있습니다.
코드 복사 코드는 다음과 같습니다.

Mat.prototype.getRow = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
i = __i || 0
return new this.data.constructor(this.buffer, i * rowLen, len) ;
};

코드 복사 코드는 다음과 같습니다.

Mat.prototype .getCol = function(__i){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0 ;
function getAllElement(__constructor){
var row = this.row,
channel = this.channel
for(var j = 0; j array.push(new __constructor(this.buffer, j * rowLen i, 1 * 채널))
}
}
getAllElement(this.data.constructor); >return array;
};

rowRange 및 colRange 메서드

마찬가지로 행과 열을 지정하는 메서드도 얻을 수 있습니다.

코드 복사 코드는 다음과 같습니다. Mat.prototype.rowRange = function(__i, __j){
var len = this.col * this.channel,
rowLen = len * this.bytes,
array = [],
i = __i || 0,
j = __j || .row;
function getAllElement(__constructor){
var row = this.row;
for(var k = i; k array.push(new __constructor (this.buffer, k * rowLen, len));
}
}
getAllElement(this.data.constructor)
return array;




코드 복사

코드는 다음과 같습니다. Mat.prototype.colRange = function(__i , __j){ var len = this.col * this.channel, rowLen = len * this.bytes, array = [],
i = __i || j = __j || this.col;
function getAllElement(__constructor){
var row = this.row
channel = this.channel
for(var k = 0; k array.push (new __constructor(this.buffer, k * rowLen __i, (__j - __i 1) * 채널))
}
}
getAllElement(Float64Array);
return array;
} ;


이 네 가지 메소드는 모두 Array 배열을 반환합니다. 이 배열 ract의 행 j와 열 k의 요소를 가져오려면 다음을 사용할 수 있습니다.
direct[j][k]
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
探索人工智能历史与矩阵:人工智能教程(二)探索人工智能历史与矩阵:人工智能教程(二)Nov 20, 2023 pm 05:25 PM

在本系列的第一篇文章中,我们讨论了人工智能、机器学习、深度学习、数据科学等领域的关联和区别。我们还就整个系列将使用的编程语言、工具等做出了一些艰难的选择。最后,我们还介绍了一点矩阵的知识。在本文中,我们将深入地讨论人工智能的核心——矩阵。不过在此之前,我们先来了解一下人工智能的历史我们为什么需要了解人工智能的历史呢?历史上曾出现过多次人工智能热潮,但在很多情况下,对人工智能潜力的巨大期望都未能达成。了解人工智能的历史,有助于让我们看清这次人工智浪潮是会创造奇迹,抑或只是另一个即将破灭的泡沫。我们

如何使用Python中的numpy计算矩阵或ndArray的行列式?如何使用Python中的numpy计算矩阵或ndArray的行列式?Aug 18, 2023 pm 11:57 PM

在本文中,我们将学习如何使用Python中的numpy库计算矩阵的行列式。矩阵的行列式是一个可以以紧凑形式表示矩阵的标量值。它是线性代数中一个有用的量,并且在物理学、工程学和计算机科学等各个领域都有多种应用。在本文中,我们首先将讨论行列式的定义和性质。然后我们将学习如何使用numpy计算矩阵的行列式,并通过一些实例来看它在实践中的应用。行列式的定义和性质Thedeterminantofamatrixisascalarvaluethatcanbeusedtodescribethepropertie

2D图像脑补3D人体,衣服随便搭,还能改动作2D图像脑补3D人体,衣服随便搭,还能改动作Apr 11, 2023 pm 02:31 PM

得益于 NeRF 提供的可微渲染,近期的三维生成模型已经在静止物体上达到了很惊艳的效果。但是在人体这种更加复杂且可形变的类别上,三维生成依旧有很大的挑战。本文提出了一个高效的组合的人体 NeRF 表达,实现了高分辨率(512x256)的三维人体生成,并且没有使用超分模型。EVA3D 在四个大型人体数据集上均大幅超越了已有方案,代码已开源。论文名称:EVA3D: Compositional 3D Human Generation from 2D image Collections论文地址:http

新视角图像生成:讨论基于NeRF的泛化方法新视角图像生成:讨论基于NeRF的泛化方法Apr 09, 2023 pm 05:31 PM

新视角图像生成(NVS)是计算机视觉的一个应用领域,在1998年SuperBowl的比赛,CMU的RI曾展示过给定多摄像头立体视觉(MVS)的NVS,当时这个技术曾转让给美国一家体育电视台,但最终没有商业化;英国BBC广播公司为此做过研发投入,但是没有真正产品化。在基于图像渲染(IBR)领域,NVS应用有一个分支,即基于深度图像的渲染(DBIR)。另外,在2010年曾很火的3D TV,也是需要从单目视频中得到双目立体,但是由于技术的不成熟,最终没有流行起来。当时基于机器学习的方法已经开始研究,比

计算矩阵右对角线元素之和的Python程序计算矩阵右对角线元素之和的Python程序Aug 19, 2023 am 11:29 AM

一种受欢迎的通用编程语言是Python。它被应用于各种行业,包括桌面应用程序、网页开发和机器学习。幸运的是,Python具有简单易懂的语法,适合初学者使用。在本文中,我们将使用Python来计算矩阵的右对角线之和。什么是矩阵?在数学中,我们使用一个矩形排列或矩阵,用于描述一个数学对象或其属性,它是一个包含数字、符号或表达式的矩形数组或表格,这些数字、符号或表达式按行和列排列。例如−234512367574因此,这是一个有3行4列的矩阵,表示为3*4矩阵。现在,矩阵中有两条对角线,即主对角线和次对

Python程序使用多维数组相乘两个矩阵Python程序使用多维数组相乘两个矩阵Sep 11, 2023 pm 05:09 PM

矩阵是按行和列排列的一组数字。m行n列的矩阵称为mXn矩阵,m和n称为其维度。矩阵是一个二维数组,在Python中使用列表或NumPy数组创建。一般来说,矩阵乘法可以通过将第一个矩阵的行乘以第二个矩阵的列来完成。这里,第一矩阵的列数应等于第二矩阵的行数。输入输出场景假设我们有两个矩阵A和B,这两个矩阵的维度分别为2X3和3X2。相乘后得到的矩阵将有2行1列。[b1,b2][a1,a2,a3]*[b3,b4]=[a1*b1+a2*b2+a3*a3][a4,a5,a6][b5,b6][a4*b2+a

C程序用于比较两个矩阵是否相等C程序用于比较两个矩阵是否相等Aug 31, 2023 pm 01:13 PM

用户必须输入两个矩阵的顺序以及两个矩阵的元素。然后,比较这两个矩阵。如果矩阵元素和大小都相等,则表明两个矩阵相等。如果矩阵大小相等但元素相等不相等,则显示矩阵可以比较,但不相等。如果大小和元素不匹配,则显示矩阵无法比较。程序以下是C程序,用于比较两个矩阵是否相等-#include<stdio.h>#include<conio.h>main(){&nbsp;&nbsp;intA[10][10],B[10][10];&nbsp;&nbsp;in

矩阵间的账号如何进行倒流?矩阵倒置是什么意思?矩阵间的账号如何进行倒流?矩阵倒置是什么意思?Mar 27, 2024 pm 12:16 PM

在社交媒体运营中,矩阵账号倒流是一种常见的策略,通过在不同账号之间相互引导流量,实现粉丝的互相补充和活跃度的提升。矩阵账号之间的倒流需要精心策划和执行,不是一件简单的事情。本文将详细探讨如何在不同账号之间实现倒流,以及矩阵倒置的意义。一、矩阵间的账号如何进行倒流?在矩阵账号中,选择一个主线账号至关重要,它将成为主要的流量来源和核心内容发布的平台。内容规划是根据账号特点和目标受众,制定相应的内容计划,以确保内容质量和风格统一。3.互推互赞:在矩阵账号之间进行互推互赞,通过合理的布局和安排,引导粉丝

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기