主頁 >  其他 > 常見的變換總結與代碼:DCT,STFT,K-L變換等

常見的變換總結與代碼:DCT,STFT,K-L變換等

2021-12-28 09:23:35 其他

文章目錄

  • 前言
  • 一、從DFT到DCT
  • 二、從CTFT到STFT
  • 三、K-L變換與降維思想
  • 四、K-L變換實體:人臉識別(含代碼和詳細注釋)
  • 五、參考資料

前言

??之前學信號和DSP的時候,除了常見的離散傅里葉變換之外,還看過諸如離散余弦變換(DCT),短時傅里葉變換(STFT),小波變換等等,這些變換看似繁多且雜亂無章,但其實其背后的思想都是變換域的思想,引入某種變換,通常是正交變換,將時間相關的信號序列變換到另一個域上來進行分析,其實我覺得理解了這個思想之后,不需要太關注公式的推導,大致了解思想簡單推導一下即可,畢竟有很多的包和函式都是集成化的,特此在這里做一個思路和代碼的總結,由于小波變換相對沒有那么常用,此處總結DCT,STFT和K-L變換,

一、從DFT到DCT

??DCT全名為離散余弦變換,當然與之相對應的有離散正弦變換,事實上,DCT變換族中有16個成員,包括8種DST和8種DCT,具體對其進行劃分的方式則是根據原始序列做對稱的方式的不同來進行劃分,例如:對稱點兩側的序列是對稱還是反對稱,是軸對稱還是中心對稱,對稱點是在離散序列的采樣點上還是不在……總之,不同的對稱形式決定了不同的DCT形式,這個公式具體的推導可以去參考一下比較經典的數字信號處理的教材,其公式推導的核心思想也就是運用了DFT中旋轉因子的對稱性,但是在本篇博客中主要關注的還是對思想的理解,以及結果代碼的實作,
??我們先來回顧一下經典的DFT公式的表達形式,其中: W N k n = e ? j 2 π N k n W_N^{kn}=e^{-j\frac{2π}{N}kn} WNkn?=e?jN2π?kn
在這里插入圖片描述
??其對應的展開形式如下:
在這里插入圖片描述
??而在各種DCT和DST中,最常見的是2型DCT,因為其具有較好的能量壓縮性質,因此接下來主要討論2型的DCT,其公式如下:
在這里插入圖片描述
??這也屬于一種正交變換,其本質原因是因為DCT的正交基還是沒有脫離三角函式系,其采用的是余弦正交基,而余弦,正弦和復指數基本身就具有正交性,
??我們可以比較一下DCT和DFT的展開形式,很容易發現:DCT中全為實數,沒有復數,且只有余弦項,這降低了數值計算的復雜度,仔細分析就會發現,其實DCT中之所以只有實數,恰恰是因為利用了離散序列的對稱性,類似于 e j w n + e ? j w n e^{jwn}+e^{-jwn} ejwn+e?jwn的形式得到的就是實數序列,

// 一維DCT函式代碼如下,輸入一個向量,得到一個向量,因此就不專門寫主函式了
function output = dct(input)
%The One-dimensional DCT,input is a vector
    N = length(input);
    for i = 0:N-1
        if i==0
            a = sqrt(1/N);
        else
            a = sqrt(2/N);
        end
        sum = 0;
        for j = 0:N-1
            sum = sum+input(j+1)*cos(pi*(j+0.5)*i/N);
        end
        output(i+1) = a * sum;
    end
end

??仿真結果部分,這里參考了一位同學匯報的PPT,下圖是原信號的時域離散波形:
在這里插入圖片描述

??而下圖則為該信號進行了DFT和DCT之后的結果:
在這里插入圖片描述

??我們可以看到,有限長序列的2型DCT的系數通常比使用DFT得到對應的系數,更多集中在較低序號(對應較低頻率)的部分(這個個人覺得可以從另一個角度去理解,做FFT時,高頻部分一定會存在有低頻部分的鏡像分量,如上圖“DFT實部和虛部“”的結果所示,但DCT可以避免這個問題),且我們發現在一般情況下,往往剩余部分的系數趨近于0,如上圖的“DCT結果”部分所示,因此,說明DCT往往比DFT具有更好的能量壓縮性質,因此,二維的DCT往往用于影像的壓縮,例如我們熟悉的 影像JPEG標準
??接下來,我們從一維DCT過度到二維DCT,二維DCT的公式如下:
在這里插入圖片描述
??類比一維DCT,將上式寫成矩陣形式,其中 c ( i ) c(i) c(i)的取值同一維情況:
在這里插入圖片描述
??同樣給出二維DCT的函式:

function output= dct2(input)
% Two-Dimensional DCT,input is a matrix
    [height,width] = size(input);
    if height==width %滿足方陣的條件
        N = height;
        A = zeros(N);
        for i=0:N-1
            if i==0
                c = sqrt(1/N);
            else
                c = sqrt(2/N);
            end
            for j=0:N-1
                A(i+1,j+1) = c*cos(pi*(j+0.5)*i/N);
            end
        end
        output= A*input*A';
    else
    disp('Error:input must be a square matrix !');
    output=0;
end

二、從CTFT到STFT

??我們熟悉的傅里葉變換只能反映出信號在頻域的特性,無法在時域內對信號進行分析,為了將時域和頻域相聯系,短時傅里葉變換(short-time Fourier transform,簡稱為STFT)便應運而生,其實質是加窗的傅里葉變換,可以去看看參考資料中一篇關于STFT的博客(鏈接在最后)
?? 我拜讀之后,簡單做了總結,并加了一些理解和補充說明,信號x(t)的短時傅里葉變換定義如下,對比普通的連續傅里葉變換(CTFT),STFT在做傅里葉變換之前對 x ( τ ) x(\tau) x(τ)先進行加窗,其窗函式的為有限長的 h ( τ ) h(\tau) h(τ),當 h ( τ ) h(\tau) h(τ)變為 h ( τ ? t ) h(\tau-t) h(τ?t)時,即相當于對窗函式進行了平移,即可以形象的認為是取出信號在分析時間點 t 附近的一個切片
在這里插入圖片描述

在這里插入圖片描述
?? 但是,以上的公式針對的都是連續信號,得到的 f f f在頻域的取值也是無窮多個,然而在MATLAB仿真的程序中,只能進行數字信號處理,先給出代碼,再進行說明,代碼如下:

clc,clear;
%% 產生信號
fs = 1000;  % 采樣頻率1KHz
N=1024;%對應傅里葉變換的點數
t = 0:1/fs:(N-1)/fs;
f1=20;
f2=60;
f3=150;
x=3*cos(2*pi*f1*t)+2*cos(2*pi*f2*t)+5*cos(2*pi*f3*t);%三個正弦信號的疊加
 
%% 短時傅里葉變換
window_length=500;%設定視窗長度,視窗越長時間解析度越差,
step=1;%每次平移的步長,最小為1,步長越小時間精度越好,
h=hamming(window_length);%設定海明窗的窗長
%wlen-hop代表每次重疊的部分的點數
%F代表頻率向量,F的取值為N/2+1;T代表時間向量,step為1時,T的取值為N-wlen+1
[B, F, T, P] = spectrogram(x,h,window_length-step,N,fs);   % B是F行T列的頻率峰值,P是對應的能量譜密度
figure;
imagesc(T,F,P);%畫圖函式
set(gca,'YDir','normal')%讓Y軸刻度順序設定為正常
colorbar;
xlabel('時間 t/s');
ylabel('頻率 f/Hz');
title('短時傅里葉時頻圖');

??接下來分析以上代碼,呼叫這個函式之后,回傳的向量F代表頻率軸,而回傳的向量T代表時間軸,而矩陣P則代表了相應的幅度(功率值),P的 s i z e size size由向量F和T決定,那么F和T的 s i z e size size又是多少呢?我們先看T,由于系統需要滿足因果性,我們假定時刻t從0開始,那么一開始窗函式的區間就是從 0 0 0-window_length,假設step為1,即每次向右平移1個,那些就有 N ? w l e n + 1 N-wlen+1 N?wlen+1個時間,再看F,如剛才所說,F的區間是連續的,如何將其離散化,那么需要確定頻率解析度以及頻率的分布區間,首先根據奈奎斯特采樣定理,采樣率 f s fs fs一定的時候,如果我們不想使其發生混疊,信號的頻率不會超過 0.5 f s 0.5fs 0.5fs,因此這即為我們考慮的區間上限(下限為0),同時頻率解析度為 f s N \frac{fs}{N} Nfs?,即采樣率和變換點數一定的時候,頻率解析度就已經確定了,因此,F的size即為 N 2 + 1 \frac{N}{2}+1 2N?+1,對應 N 2 \frac{N}{2} 2N?個間隔,(也可以這么理解,N點序列作傅里葉變換后得到N點序列,而后面的N/2個點就是前面N/2個點的鏡像分量,沒有必要考慮)

三、K-L變換與降維思想

??在machine learning中,我們經常需要防止資料的維度過高,而這就需要用到降維的思想,常見的降維有:直接降維,線性降維和非線性降維,而線性降維中常見的方法則是PCA(主成分分析,也稱為K-L變換,以下統稱用PCA),
??PCA的核心思想即為將一組線性相關的變數,通過正交變換,變換成一組線性無關的變數,從信號空間理論的角度可以理解為對原始特征空間的重構,在PCA中,有最大投影方差最小重構距離兩種主流思路,最終可推匯出相同的結果,事實上,也可以從概率的角度對PCA進行展開,限于篇幅,只給出最終結論,具體請參考AI圣經:PRML,
??對于一組資料集{ x n x_n xn?},其中的每個 x n x_n xn?都在一個 D D D維空間中,即研究如何將資料投影到 M < D M<D M<D M M M維空間中,具體方法如下:定義 x n x_n xn?為樣本集合的均值,即 x ˉ = ∑ n = 1 N x n \bar{x}=\sum_{n=1}^Nx_n xˉ=n=1N?xn?,而定義資料的協方差矩陣(covariance matrix): S = 1 N ? ∑ n = 1 N ( x n ? x ˉ ) ( x n ? x ˉ ) T S=\frac{1}{N} \cdot \sum_{n=1}^N (x_n-\bar{x})(x_n-\bar{x})^T S=N1??n=1N?(xn??xˉ)(xn??xˉ)T.對矩陣 S S S進行特征值分解,對于降維到 M M M維空間的情況,則選出 M M M個最大的特征值對應的特征向量,即可得到新的 M M M維空間中的一組基,
??以上就是PCA的理論部分,但是當涉及到具體實作的時候,我們就會發現,往往原有的空間維數 D D D是遠遠高于樣本數量 N N N的,就拿我們最常見的影像為例,可能一個影像有100萬個像素點,但是樣本個數只有大概100個,這樣的話,如果直接運行PCA就變的行不通了,因為會遇到 D ? D D \cdot D D?D 超大矩陣求逆的世界難題,同時,我們會發現這樣得到的特征值至少有 D ? N + 1 D-N+1 D?N+1個為0,因為N個資料點的線性子空間的維數最多為 N ? 1 N-1 N?1,因此,我們需要采樣如下的方法,具體推導可以參考PRML的高維PCA部分,這里給出最終結論
??1.定義 X X X D ? N D\cdot N D?N維中心資料矩陣,它的第 n n n列即為 ( x n ? x ˉ ) (x_n-\bar{x}) (xn??xˉ)
?? 2.求解 S 1 = X T ? X S_1=X^T \cdot X S1?=XT?X,此時 S 1 S1 S1的維度為 N ? N N \cdot N N?N,對其進行奇異值分解,得到特征值 λ i \lambda_{i} λi?的集合和特征向量 v i v_{i} vi?的集合,每一個 v i v_{i} vi?都為 N N N維向量,
?? 3. u i = 1 λ i ? X ? v i , i = 0 , 1 , 2 , ? ? , p u_i=\frac{1}{\sqrt{\lambda_{i}}}\cdot X \cdot v_{i}, i=0,1,2, \cdots, p ui?=λi? ?1??X?vi?,i=0,1,2,?,p,此時每一個 u i u_{i} ui?都為 D D D維向量,即為 p p p D D D維向量構成了高維空間的線性子空間的一組基,
??K-L變換的具體應用請看下一節的人臉識別實體


四、K-L變換實體:人臉識別(含代碼和詳細注釋)

%% 兩組影像資料的讀取
clear,clc;

train_files = dir('F1');%回傳目錄中的檔案()
all_train = [];%樣本矩陣
first_number=3;
last_number=102;
image_number = last_number-first_number+1;%圖片總共的數目
for i = first_number : last_number
    train_file_name = train_files(i).name;%讀圖片名
    train_file_name=strcat('F1','\',train_file_name);%字符拼接函式
    sample_figure= imread(train_file_name);%從指定的檔案讀取一幅影像
    [row,col]=size(sample_figure);
    pixel_number=row*col;%圖片像素點數目
    temp=reshape(sample_figure,pixel_number,1);%回傳一個m*1的矩陣temp,將二維影像資料變成一維列向量
    all_train=[all_train,temp];%將所有圖片資料變成一個樣本矩陣,一個列向量對應一個高維空間
end

test_files = dir('F2');%回傳目錄中的檔案()
all_test = [];%測驗矩陣
for i = first_number : last_number
    test_file_name = test_files(i).name;
    test_file_name=strcat('F2','\',test_file_name);
    test = imread(test_file_name);
    [row,col]=size(test);
    test_temp=reshape(test,row*col,1);%回傳一個m*1的矩陣temp,將二維影像資料變成一維列向量
    all_test=[all_test,test_temp];%將所有圖片資料變成一個樣本矩陣
end

%% 主成分分析(PCA)
average_train= mean(all_train,2);   %回傳行的平均值,即100個圖片的平均值
%計算每個影像與均值的差
for i=1:image_number
    A(:,i)=double(all_train(:,i))-average_train;%需要先將allsample轉化為雙精度(double)型別
end

%計算協方差矩陣的特征矢量和特征值
L =(A'*A);    %由SVD理論構造矩陣L=A'*A用于計算特征值和特征向量
%本來是A*A',由于復雜度過高,提出改進演算法
[V,D] = eig(L);%計算矩陣A的特征值D和特征向量矩陣V,特征向量得到的是歸一化特征向量

d1=diag(D);%會自動按升序排序
% 按特征值大小以降序排列
d_sort = flipud(d1);%實作上下翻轉
v_sort = fliplr(V);%實作左右翻轉,實作特征值和特征向量矩陣的對應

%以下選擇80%的能量
d_sum = sum(d_sort);%將陣列中元素進行求和
d_sum_temp = 0;
main_number = 0;%特征值主分量個數
while( d_sum_temp/d_sum < 0.8)
    main_number = main_number + 1;
    d_sum_temp = sum(d_sort(1:main_number));
end

%計算新空間中的基
for i=1:main_number
    U(:,i)=(d_sort(i)^(-1/2))*A*v_sort(:,i); %PRML公式12.30,此處沒有N是因為之前SVD的時候沒有帶N
end
%U即為新空間中的一組基,每一個列向量代表一個基,main_number個基張成高維空間的線性子空間

%% 對測驗集中的人臉進行識別
for i=1:image_number
    test_A(:,i)=double(all_test(:,i))-average_train;%此處應該是減去average_train,因為需要相同的映射規則
end

%計算訓練集中人臉在特征空間中的投影表示,每一列代表一個圖片在新空間中的坐標
train_projection=U'*A; %可理解為做內積

%計算測驗集中人臉在特征空間中的投影表示,每一列代表一個圖片在新空間中的坐標
test_projection=U'*test_A;

%測驗集中人臉和訓練集中人臉相似性進行匹配
projection_match=zeros(main_number,image_number);
success_number=0;%sum1為匹配成功的數目
position=zeros(image_number,1);
temp_vector=zeros(main_number,image_number);
diffrence_vector=zeros(image_number,1);%用于存盤一個特定的測驗資料坐標和之前每一個訓練資料坐標的距離

for i=1:image_number  %測驗集中的第i個圖片資料
    for j=1:image_number
        temp_vector(:,j)=test_projection(:,i)-train_projection(:,j);
        diffrence_vector(j)=norm(temp_vector(:,j), 2);
    end
    [~,position(i)]=min(diffrence_vector);%找到最小距離對應訓練集中的位置,存在position(i)if(i==position(i))
        success_number=success_number+1;
    end
end
accuracy_rate=(success_number/image_number);
display(accuracy_rate);%輸出準確率

%% 隨機抽取5個圖形做代表顯示匹配效果
%兩組圖片的相同編號,對應同一個人兩張不同的圖
for i=1:5
    ri=(round(100*rand(1,1)));
    figure(i);
    subplot(121); 
    r=all_train(:,ri);
    imshow(reshape(r,142,120));
    title(train_files(ri).name,'FontWeight','bold','Fontsize',15,'color','red');
    subplot(122);
    k=position(ri);
    imshow(reshape(all_test(:,k),142,120));
    title(test_files(k).name,'FontWeight','bold','Fontsize',15,'color','red');
end






五、參考資料

1.二維DCT變換
2.STFT.
3.PCA做人臉識別.

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/395263.html

標籤:其他

上一篇:C#實作回合制游戲模擬

下一篇:MMDetection2.17-自定義組件時注冊表(Registry)分析理解--以如何增加注意力模塊為例

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more