離散傅里葉變換(Discrete Fourier Transform, DFT)及其在圖像處理中的應用

離散傅里葉變換(DFT)及其在圖像處理中的應用

什么是離散傅里葉變換?

離散傅里葉變換(Discrete Fourier Transform, DFT)是一種強大的數學工具,用于將離散信號從時域(或空間域)轉換到頻域。它可以將一個有限長度的信號分解成一系列正弦和余弦波的組合,每個波都有特定的頻率、幅度和相位。DFT 的核心思想來源于傅里葉分析,但它適用于離散信號,是數字信號處理和圖像處理的基礎。

DFT 的數學定義如下:對于長度為 ( N N N) 的一維信號 ( x [ n ] x[n] x[n]),其離散傅里葉變換為:

X [ k ] = ∑ n = 0 N ? 1 x [ n ] e ? j 2 π N n k , k = 0 , 1 , . . . , N ? 1 X[k] = \sum_{n=0}^{N-1} x[n] e^{-j \frac{2\pi}{N} nk}, \quad k = 0, 1, ..., N-1 X[k]=n=0N?1?x[n]e?jN2π?nk,k=0,1,...,N?1

其中:

  • ( X [ k ] X[k] X[k]) 是頻域中的復數系數,表示頻率分量;
  • ( x [ n ] x[n] x[n]) 是時域或空間域的輸入信號;
  • ( e ? j 2 π N n k e^{-j \frac{2\pi}{N} nk} e?jN2π?nk) 是復指數函數,包含正弦和余弦成分;
  • ( j j j) 是虛數單位。

反變換(IDFT)可以將頻域信號轉換回時域:

x [ n ] = 1 N ∑ k = 0 N ? 1 X [ k ] e j 2 π N n k x[n] = \frac{1}{N} \sum_{k=0}^{N-1} X[k] e^{j \frac{2\pi}{N} nk} x[n]=N1?k=0N?1?X[k]ejN2π?nk

DFT 有什么用?

DFT 的用途非常廣泛,尤其是在信號處理和圖像處理領域。以下是一些主要應用:

  1. 頻譜分析:分析信號的頻率成分,例如音頻信號中的音調或圖像中的紋理。
  2. 濾波:通過修改頻域系數實現低通、高通或帶通濾波,去除噪聲或增強特定特征。
  3. 圖像壓縮:提取主要頻率成分,丟棄次要信息(如 JPEG 中的 DCT)。
  4. 卷積加速:利用快速傅里葉變換(FFT)實現高效卷積運算,廣泛應用于圖像處理和深度學習。

在圖像處理中,二維 DFT 特別重要,因為圖像本質上是一個二維信號。通過分析圖像的頻域特性,我們可以進行去噪、邊緣檢測、紋理分析等操作。

二維 DFT 在圖像處理中的應用

對于一張二維圖像 ( f ( x , y ) f(x, y) f(x,y))(大小為 ( M × N M \times N M×N)),二維 DFT 的公式為:

F ( u , v ) = ∑ x = 0 M ? 1 ∑ y = 0 N ? 1 f ( x , y ) e ? j 2 π ( u x M + v y N ) F(u, v) = \sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) e^{-j 2\pi \left( \frac{ux}{M} + \frac{vy}{N} \right)} F(u,v)=x=0M?1?y=0N?1?f(x,y)e?j2π(Mux?+Nvy?)

其中:

  • ( F ( u , v ) F(u, v) F(u,v)) 是頻域系數,( u u u) 和 ( v v v) 分別表示水平和垂直方向的頻率;
  • ( f ( x , y ) f(x, y) f(x,y)) 是圖像像素值。

反變換為:

f ( x , y ) = 1 M N ∑ u = 0 M ? 1 ∑ v = 0 N ? 1 F ( u , v ) e j 2 π ( u x M + v y N ) f(x, y) = \frac{1}{MN} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v) e^{j 2\pi \left( \frac{ux}{M} + \frac{vy}{N} \right)} f(x,y)=MN1?u=0M?1?v=0N?1?F(u,v)ej2π(Mux?+Nvy?)

在圖像處理中,二維 DFT 的結果是一個復數矩陣,其幅度譜(Magnitude Spectrum)通常用于可視化:

∣ F ( u , v ) ∣ = Re ( F ( u , v ) ) 2 + Im ( F ( u , v ) ) 2 |F(u, v)| = \sqrt{\text{Re}(F(u, v))^2 + \text{Im}(F(u, v))^2} F(u,v)=Re(F(u,v))2+Im(F(u,v))2 ?

以下是一個 Python 代碼示例,展示如何對圖像應用二維 DFT 并可視化頻譜。


Python 代碼實現(二維 DFT)

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft2, ifft2, fftshift# Load and process an image
def load_image():# Create a simple synthetic image (grayscale)image = np.zeros((256, 256))image[100:156, 100:156] = 255  # Add a white square in the centerreturn image# Apply 2D DFT and visualize
def apply_dft(image):# Compute 2D DFTdft = fft2(image)# Shift the zero frequency component to the centerdft_shifted = fftshift(dft)# Compute magnitude spectrum (log scale for better visualization)magnitude_spectrum = np.log(1 + np.abs(dft_shifted))# Reconstruct the image using inverse DFTreconstructed_image = np.abs(ifft2(dft))return magnitude_spectrum, reconstructed_image# Main function
if __name__ == "__main__":# Load imageoriginal_image = load_image()# Apply DFTmagnitude_spectrum, reconstructed_image = apply_dft(original_image)# Visualizationplt.figure(figsize=(12, 4))plt.subplot(1, 3, 1)plt.imshow(original_image, cmap='gray')plt.title("Original Image")plt.axis('off')plt.subplot(1, 3, 2)plt.imshow(magnitude_spectrum, cmap='gray')plt.title("Magnitude Spectrum (Log Scale)")plt.axis('off')plt.subplot(1, 3, 3)plt.imshow(reconstructed_image, cmap='gray')plt.title("Reconstructed Image")plt.axis('off')plt.tight_layout()plt.show()
代碼說明
  1. load_image:生成一個簡單的 256x256 灰度圖像,中間有一個白色方塊,用于測試。
  2. apply_dft
    • 使用 scipy.fft.fft2 計算二維 DFT。
    • 使用 fftshift 將零頻分量移到頻譜中心,便于可視化。
    • 計算幅度譜并取對數(np.log(1 + np.abs())),增強顯示效果。
    • 使用 ifft2 進行逆變換,重構圖像。
  3. 可視化:展示原始圖像、頻譜圖和重構圖像。
運行結果

在這里插入圖片描述

運行代碼后,你會看到:

  • 原始圖像:一個帶有白色方塊的灰度圖像。
  • 幅度譜:頻譜圖顯示低頻分量集中在中心,高頻分量分布在邊緣,形成對稱圖案。
  • 重構圖像:通過逆 DFT 恢復的圖像,應與原始圖像幾乎一致。

DFT 與 DCT 的區別

關于DCT,可以參考筆者的另一篇博客:離散余弦變換(Discrete Cosine Transform, DCT):從數學到圖像壓縮的魔法(Python代碼實現)

離散傅里葉變換(DFT)和離散余弦變換(DCT)都是頻域變換工具,但在原理和應用上有顯著差異:

  1. 數學基礎

    • DFT:使用復指數函數 ( e ? j θ e^{-j\theta} e?jθ),輸出是復數(包含幅度和相位),能完整表示信號的頻率和相位信息。
    • DCT:僅使用實數的余弦函數,輸出是實數,專注于信號的幅度信息,相位信息被簡化。
  2. 邊界條件

    • DFT:假設信號是周期性的,因此在邊界處可能引入偽影(稱為“周期性邊界效應”)。
    • DCT:假設信號在邊界處通過鏡像對稱擴展,減少邊界偽影,特別適合圖像處理。
  3. 能量集中

    • DCT:將信號能量更多地集中在低頻系數中,這使得它在壓縮(如 JPEG)中更高效。
    • DFT:能量分布較均勻,不如 DCT 集中,但在頻譜分析中更全面。
  4. 計算復雜度

    • DFT:直接計算復雜度為 ( O ( N 2 ) O(N^2) O(N2)),但通過快速傅里葉變換(FFT)可降至 (O(N \log N)),適用于大尺寸信號。
    • DCT:復雜度也為 ( O ( N 2 ) O(N^2) O(N2)),但在圖像壓縮中通常處理小塊(如 8x8),實際計算量較小。
  5. 應用場景

    • DFT:更適合需要完整頻率信息和相位的場景,如信號分析、濾波、卷積運算。
    • DCT:專為數據壓縮設計(如 JPEG、MPEG),因其能量集中特性在有損壓縮中占優。
總結

離散傅里葉變換(DFT)是一個通用的信號分析工具,在圖像處理中通過二維 DFT 可以揭示圖像的頻率特性,適用于濾波、去噪等任務。而 DCT 則是圖像壓縮的“秘密武器”,通過能量集中和實數運算優化了壓縮效率。選擇 DFT 還是 DCT,取決于你的具體需求:如果你需要全面的頻域分析,DFT 是首選;如果目標是高效壓縮,DCT 更勝一籌。

希望這篇博客和代碼能讓你更好地理解 DFT 及其與 DCT 的差異!如果有疑問,歡迎留言討論。

你的疑問非常好!關于頻譜圖中“低頻分量集中在中心且很亮”的現象,以及為什么亮的不是高頻分量,這涉及到頻域表示的特點和可視化時的處理方式。下面我來詳細解答:


為什么頻譜圖中低頻分量集中在中心且很亮?

1. 頻譜圖的中心化(fftshift 的作用)

在代碼中,我們使用了 fftshift 函數對二維 DFT 的結果進行了移位處理。原始的 DFT 輸出 ( F ( u , v ) F(u, v) F(u,v)) 將零頻分量(即頻率為 0 的分量)放在矩陣的左上角 ( ( 0 , 0 ) (0, 0) (0,0)) 位置。但在實際可視化時,為了更直觀地觀察頻率分布,我們通常將零頻分量移到頻譜圖的中心。這種移位操作使得:

  • 低頻分量(接近零頻的頻率)集中在頻譜圖的中心。
  • 高頻分量(較大的頻率)分布在邊緣。

因此,在你看到的頻譜圖中,中心區域代表低頻分量,而邊緣區域代表高頻分量。

2. 亮度與幅度譜的關系

頻譜圖顯示的是幅度譜 ( ∣ F ( u , v ) ∣ |F(u, v)| F(u,v)),即 DFT 復數系數的模(magnitude),計算公式為:

∣ F ( u , v ) ∣ = Re ( F ( u , v ) ) 2 + Im ( F ( u , v ) ) 2 |F(u, v)| = \sqrt{\text{Re}(F(u, v))^2 + \text{Im}(F(u, v))^2} F(u,v)=Re(F(u,v))2+Im(F(u,v))2 ?

為了讓幅度譜的可視化更清晰,代碼中還對幅度取了對數:

magnitude_spectrum = log ? ( 1 + ∣ F ( u , v ) ∣ ) \text{magnitude\_spectrum} = \log(1 + |F(u, v)|) magnitude_spectrum=log(1+F(u,v))

  • 低頻分量為什么亮?
    在圖像中,低頻分量通常對應平滑區域或整體亮度變化(例如大塊的白色或黑色區域)。這些區域的能量(幅度)往往很大,因為它們占據了圖像的主要內容。在你的示例圖像中,白色方塊是一個較大的均勻區域,其能量集中在低頻部分,因此中心區域的幅度值很高。取對數后,這些高幅度值在灰度圖中表現為“很亮”。

  • 高頻分量為什么不亮?
    高頻分量對應圖像中的細節、邊緣或快速變化的部分(例如白色方塊的邊界)。這些分量的幅度通常較小,因為細節部分的能量分布較分散,且在圖像中占的比例較低。即使某些高頻分量的幅度可能不小,取對數后它們的值也被壓縮,不如低頻分量突出,因此邊緣區域顯得較暗。

3. 為什么亮的不是高頻?

疑問:“亮的一般不是高頻嗎?”
這可能是因為在某些直觀理解中,高頻分量與“尖銳”或“顯著”的邊緣相關,容易讓人覺得它們應該很“亮”。但在頻譜圖中,亮度直接反映的是幅度的大小,而不是頻率的高低:

  • 圖像特性決定能量分布:對于大多數自然圖像或簡單圖像(如你的白色方塊示例),低頻分量包含大部分能量,因為它們描述了圖像的主要結構。而高頻分量的能量通常較少,除非圖像充滿了密集的細節或噪聲。
  • 對數縮放的影響:未經對數縮放的幅度譜動態范圍很大,低頻分量可能比高頻分量高出幾個數量級。如果直接顯示原始幅度譜,低頻的亮度會過于強烈,其他部分幾乎不可見。取對數是為了平衡這種差異,讓高頻分量也能被看到,但低頻的高幅度仍然主導了亮度。

用代碼驗證亮度的來源

為了進一步說明,我們可以修改代碼,觀察不同圖像的頻譜圖,驗證低頻和高頻的亮度分布。以下是擴展代碼:

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft2, ifft2, fftshift# Create a synthetic image with a white square (low frequency dominant)
def load_low_freq_image():image = np.zeros((256, 256))image[100:156, 100:156] = 255  # White square in the centerreturn image# Create a synthetic image with high-frequency details (checkerboard pattern)
def load_high_freq_image():image = np.zeros((256, 256))for i in range(256):for j in range(256):if (i // 16 + j // 16) % 2 == 0:  # Checkerboard patternimage[i, j] = 255return image# Apply 2D DFT and visualize
def apply_dft(image):dft = fft2(image)dft_shifted = fftshift(dft)magnitude_spectrum = np.log(1 + np.abs(dft_shifted))reconstructed_image = np.abs(ifft2(dft))return magnitude_spectrum, reconstructed_image# Main function
if __name__ == "__main__":# Test two imageslow_freq_image = load_low_freq_image()  # Low frequency dominanthigh_freq_image = load_high_freq_image()  # High frequency dominant# Apply DFT to bothlow_freq_spectrum, low_freq_reconstructed = apply_dft(low_freq_image)high_freq_spectrum, high_freq_reconstructed = apply_dft(high_freq_image)# Visualizationplt.figure(figsize=(12, 8))plt.subplot(2, 3, 1)plt.imshow(low_freq_image, cmap='gray')plt.title("Low Frequency Image")plt.axis('off')plt.subplot(2, 3, 2)plt.imshow(low_freq_spectrum, cmap='gray')plt.title("Magnitude Spectrum (Low Freq)")plt.axis('off')plt.subplot(2, 3, 3)plt.imshow(low_freq_reconstructed, cmap='gray')plt.title("Reconstructed Image (Low Freq)")plt.axis('off')plt.subplot(2, 3, 4)plt.imshow(high_freq_image, cmap='gray')plt.title("High Frequency Image")plt.axis('off')plt.subplot(2, 3, 5)plt.imshow(high_freq_spectrum, cmap='gray')plt.title("Magnitude Spectrum (High Freq)")plt.axis('off')plt.subplot(2, 3, 6)plt.imshow(high_freq_reconstructed, cmap='gray')plt.title("Reconstructed Image (High Freq)")plt.axis('off')plt.tight_layout()plt.show()
運行結果分析

在這里插入圖片描述

  1. 低頻主導圖像(白色方塊)

    • 頻譜圖中心很亮,因為白色方塊的均勻區域貢獻了大量低頻能量。
    • 邊緣較暗,高頻分量(方塊邊界)的能量較少。
  2. 高頻主導圖像(棋盤格圖案)

    • 頻譜圖中亮度分布到遠離中心的位置,形成離散的亮點,對應棋盤格的高頻周期性變化。
    • 中心(低頻)不再是最亮的區域,因為圖像缺少大范圍平滑結構。

總結

頻譜圖中“亮”的區域反映的是幅度的大小,而幅度的大小取決于圖像的能量分布:

  • 低頻分量亮:在你的原始例子中,低頻分量因白色方塊的平滑區域而具有高幅度,因此中心很亮。
  • 高頻分量暗:高頻分量的能量通常較分散,且幅度較小,在對數縮放下不突出。
  • 亮的不是高頻的誤解:高頻分量可能在邊緣或細節豐富的圖像中更顯著,但在典型圖像中,低頻分量往往占主導地位。

如果你對特定圖像的頻譜有疑問,可以提供圖像或描述,我可以幫你進一步分析!

為什么頻譜圖通常只顯示幅度譜 ( ∣ F ( u , v ) ∣ |F(u, v)| F(u,v)),而相位譜往往被忽略?


什么是幅度譜和相位譜?

在二維離散傅里葉變換(DFT)中,輸出 ( F ( u , v ) F(u, v) F(u,v)) 是一個復數矩陣,每個元素可以表示為:

F ( u , v ) = Re ( F ( u , v ) ) + j ? Im ( F ( u , v ) ) F(u, v) = \text{Re}(F(u, v)) + j \cdot \text{Im}(F(u, v)) F(u,v)=Re(F(u,v))+j?Im(F(u,v))

其中:

  • ( Re ( F ( u , v ) ) \text{Re}(F(u, v)) Re(F(u,v))) 是實部;
  • ( Im ( F ( u , v ) ) \text{Im}(F(u, v)) Im(F(u,v))) 是虛部。

我們可以將其轉換為極坐標形式:

F ( u , v ) = ∣ F ( u , v ) ∣ e j ? ( u , v ) F(u, v) = |F(u, v)| e^{j \phi(u, v)} F(u,v)=F(u,v)ej?(u,v)

  • 幅度譜 ( ∣ F ( u , v ) ∣ |F(u, v)| F(u,v)):
    ∣ F ( u , v ) ∣ = Re ( F ( u , v ) ) 2 + Im ( F ( u , v ) ) 2 |F(u, v)| = \sqrt{\text{Re}(F(u, v))^2 + \text{Im}(F(u, v))^2} F(u,v)=Re(F(u,v))2+Im(F(u,v))2 ?
    表示每個頻率分量的強度或能量大小。

  • 相位譜 ( ? ( u , v ) \phi(u, v) ?(u,v)):
    ? ( u , v ) = arctan ? ( Im ( F ( u , v ) ) Re ( F ( u , v ) ) ) \phi(u, v) = \arctan\left(\frac{\text{Im}(F(u, v))}{\text{Re}(F(u, v))}\right) ?(u,v)=arctan(Re(F(u,v))Im(F(u,v))?)
    表示每個頻率分量的相位角,反映信號在時間或空間上的偏移。


為什么頻譜圖通常只顯示幅度譜?

1. 幅度譜直接反映能量分布

幅度譜 ( ∣ F ( u , v ) ∣ |F(u, v)| F(u,v)) 表示每個頻率分量的強度,直接對應于信號的能量分布。在圖像處理和信號分析中,我們通常關心:

  • 哪些頻率分量占主導地位(例如低頻的平滑區域還是高頻的邊緣);
  • 信號的頻率特性如何(例如是否有噪聲或特定模式)。

幅度譜提供了直觀的“強度圖”,可以快速判斷信號的主要成分。例如:

  • 在你的白色方塊圖像中,幅度譜中心的亮點表明低頻分量占主導;
  • 在噪聲圖像中,高頻分量可能更顯著。

相比之下,相位譜 ( ? ( u , v ) \phi(u, v) ?(u,v)) 是一個角度值(通常在 ( [ ? π , π ] [- \pi, \pi] [?π,π]) 范圍內),它的數值沒有直接的物理意義(如能量或強度),可視化后往往是一片雜亂的圖案,不易直觀解讀。

2. 可視化難度
  • 幅度譜:取對數后(如 ( log ? ( 1 + ∣ F ( u , v ) ∣ ) \log(1 + |F(u, v)|) log(1+F(u,v)))),幅度譜的值被壓縮到一個合理的范圍,便于用灰度圖或彩色圖顯示,人類視覺系統能輕松分辨。
  • 相位譜:相位值是周期性的角度(如 ( ? π -\pi ?π) 到 ( π \pi π)),直接顯示時會形成復雜的跳躍圖案(由于相位的周期性,可能出現不連續的邊界)。即使映射到灰度值,也很難看出規律,除非進行特殊處理(如解纏繞或平滑),但這增加了分析復雜性。
3. 應用場景的側重點

在許多實際應用中,幅度譜已經足以滿足需求:

  • 圖像壓縮:如 JPEG 使用 DCT,只關心幅度信息來量化系數,相位被忽略。
  • 濾波:設計低通或高通濾波器時,主要修改幅度譜(如削弱高頻分量),相位通常保持不變。
  • 頻譜分析:檢查信號的頻率分布時,幅度譜直接給出答案。

相位譜雖然包含信息,但在這些場景下不是首要關注的,因為它對最終結果的感知影響較小(后面會詳細解釋)。


相位譜的作用是什么?為什么不常關心?

相位譜的作用

相位譜 ( ? ( u , v ) \phi(u, v) ?(u,v)) 描述了每個頻率分量在空間或時間上的相對位置或偏移。換句話說,它決定了信號的“形狀”或“結構”,而幅度譜決定了“強度”。在圖像中:

  • 幅度譜:控制每個頻率分量的大小,影響圖像的對比度和能量分布。
  • 相位譜:控制頻率分量的排列方式,影響圖像的空間結構(如邊緣的位置、物體的輪廓)。

一個經典實驗可以說明兩者的作用:將兩張圖像的幅度譜和相位譜互換,然后用逆 DFT 重構:

  • 用圖像 A 的幅度譜 + 圖像 B 的相位譜:重構圖像更像圖像 B。
  • 用圖像 B 的幅度譜 + 圖像 A 的相位譜:重構圖像更像圖像 A。

這表明相位譜對圖像的視覺結構(可識別性)至關重要,而幅度譜更多影響亮度和對比度。

為什么不常關心相位譜?
  1. 人類視覺對相位的敏感度較低
    人眼對圖像的整體結構(由相位決定)非常敏感,但對相位的微小擾動不敏感。例如:

    • 如果幅度譜保持不變,輕微改變相位譜,圖像仍可識別。
    • 如果相位譜保持不變,改變幅度譜(如濾波),圖像的感知變化更明顯(如變模糊或變清晰)。
      在壓縮或濾波中,丟棄或修改部分相位信息對視覺影響較小,因此相位常被忽略。
  2. 相位信息難以處理和利用

    • 相位譜的周期性和跳躍性使其難以直接操作。例如,濾波時修改相位可能引入偽影(如振鈴效應),而修改幅度更直觀。
    • 在壓縮中(如 JPEG),相位信息被 DCT 簡化(DCT 是實數變換,不保留相位),但仍能重構可接受的圖像。
  3. 計算和存儲成本
    DFT 輸出是復數,包含幅度和相位需要雙倍存儲空間(實部和虛部)。而在許多應用中,只保留幅度譜即可完成任務(如頻譜分析或壓縮),省去了存儲和處理相位的開銷。


兩者結合不是更好嗎?

理論上,幅度譜和相位譜結合確實能完整描述信號,因為:

  • 幅度譜:提供頻率分量的強度;
  • 相位譜:提供頻率分量的空間排列。

完整的 DFT 重構(使用 ( F ( u , v ) F(u, v) F(u,v)) 的實部和虛部)需要兩者結合,否則無法準確恢復原始信號。然而,在實踐中:

  • 特定任務不需要完整信息:如頻譜分析只看幅度,壓縮只用幅度簡化計算。
  • 相位的重要性因應用而異:在信號傳輸或某些逆問題(如相位檢索)中,相位至關重要,但在圖像可視化或壓縮中,幅度往往足夠。

總結

  • 為什么只顯示幅度譜? 因為它直觀反映能量分布,易于可視化和分析,滿足大多數應用需求。
  • 為什么不常關心相位譜? 因為相位對視覺感知的影響不如幅度明顯,且處理復雜,在壓縮或濾波中常被簡化。
  • 兩者結合更好嗎? 是的,在需要完整信號重構或特定任務(如相位檢索)時,相位不可或缺。但在圖像處理的常見場景中,幅度譜已足夠實用。

希望這個解答和代碼能讓你更清楚地理解幅度譜和相位譜的角色!

后記

2025年3月3日15點58分于上海,在grok3大模型輔助下完成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897110.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 macOS 上使用 CLion 進行 Google Test 單元測試

介紹 Google Test(GTest)是 Google 開源的 C 單元測試框架,它提供了簡單易用的斷言、測試夾具(Fixtures)和測試運行機制,使 C 開發者能夠編寫高效的單元測試。 本博客將介紹如何在 macOS 上使用 CLion 配…

Oracle SQL優化實戰要點解析(11)——索引、相關子查詢及NL操作(1)

11.1. 充分利用索引有序特性,避免發生大表上的FTS,以及對中間大數據集的排序。 11.1.1. 適用場景 從一個或多個大表(例如:億行級或TB級數據量)中過濾出全列大數據集(例如:數百萬或千萬行數據),對該大數據集按其中某列進行排序,最終,只取最前面的少部分數據(例如:…

軟考架構師筆記-計算機網絡

1.9 計算機網絡 OSI/RM 七層模型 物理層 二進制傳輸(中繼器、集線器) (typedef) 數據鏈路層 傳送以幀為單位的信息(網橋、交換機、網卡) 網絡層 分組傳輸和路由選擇(三層交換機、路由器)ARP/RARP/IGMP/ICMP/IP 傳輸層 端到端的連接(TCP/UDP)在前向糾錯系統中,當接…

STM32MP157A單片機移植Linux系統使用python鏈接云服務器

思維導圖 需求分析 stm32mp157a單片機上移植Linux操作系統,包括LCD驅動、觸摸驅動、Ethernet/WiFi支持,設備樹信息包括ADC、GPIO、LCD,使用QT上位機在PC端顯示,通過TCP與stm32交互,將ad數據傳輸到PC端和云服務器&…

【MySQL】Can‘t connect to server in ‘localhost‘

【問題】連接MySQL數據庫時報錯: 【原因】沒有啟動MySQL服務 【解決方法】👇👇👇 1.以管理員身份運行PowerShell 2.執行命令:net start MySQL 提示 “MySQL服務已經啟動成功” 就說明成功了,這時再連…

OceanBase-obcp-v3考試資料梳理

集群架構 基本概念 集群: 集群由一個或多個Region組成,Region 由一個或多個Zone組成,Zone由一個或多個OBServer組成,每個OBServer里有若干個partition的Replica。 Region: 對應物理上的一個城市或地域,當OB集群由多個Region組成時, 數據庫的數據和服務能力就具備地域…

Vue 系列之:組件通訊

子組件調用父組件方法 1、直接在子組件中通過 this.$parent.event 來調用父組件的方法 父組件&#xff1a; <template><p><child></child></p> </template> <script>import child from ./child;export default {components: {chi…

ComfyUI簡介

一、ComfyUI 是什么&#xff1f; ComfyUI 是一款基于節點的圖形用戶界面&#xff08;GUI&#xff09;&#xff0c;專為 Stable Diffusion 設計。它通過模塊化節點連接的方式構建復雜的圖像生成工作流&#xff0c;用戶可自由組合加載模型、輸入提示詞、調整采樣器等操作模塊&am…

我的兩個醫學數據分析技術思路

我的兩個醫學數據分析技術思路 從臨床上獲得的或者公共數據庫數據這種屬于觀察性研究&#xff0c;是對臨床診療過程中自然產生的數據進行分析而獲得疾病發生發展的規律等研究成果。再細分&#xff0c;可以分為獨立危險因素鑒定和預測模型構建兩種。 獨立危險因素鑒定是一直以…

【YOLOv12改進trick】StarBlock引入YOLOv12,創新漲點優化,含創新點Python代碼,方便發論文

??改進模塊??:StarBlock ??解決問題??:采用StarBlock將輸入數據映射到一個極高維的非線性特征空間,生成豐富的特征表示,使得模型在處理復雜數據時更加有效。 ??改進優勢??:簡單粗暴的星型乘法漲點卻很明顯 ??適用場景??:目標檢測、語義分割、自然語言處理…

pyside6學習專欄(九):在PySide6中使用PySide6.QtCharts繪制6種不同的圖表的示例代碼

PySide6的QtCharts類支持繪制各種型狀的圖表&#xff0c;如面積區域圖、餅狀圖、折線圖、直方圖、線條曲線圖、離散點圖等&#xff0c;下面的代碼是采用示例數據繪制這6種圖表的示例代碼,并可實現動畫顯示效果&#xff0c;實際使用時參照代碼中示例數據的格式將實際數據替換即可…

《今日AI-人工智能-編程日報》

1. 字節跳動發布AI編程工具Trae國內版 發布背景&#xff1a;字節跳動于2025年3月3日正式推出國內版AI編程工具Trae&#xff0c;這是國內首個AI原生集成開發環境&#xff08;AI IDE&#xff09;&#xff0c;旨在提升開發者的編程效率與智能化體驗。 核心功能&#xff1a; 搭載d…

doris: MySQL

Doris JDBC Catalog 支持通過標準 JDBC 接口連接 MySQL 數據庫。本文檔介紹如何配置 MySQL 數據庫連接。 使用須知? 要連接到 MySQL 數據庫&#xff0c;您需要 MySQL 5.7, 8.0 或更高版本 MySQL 數據庫的 JDBC 驅動程序&#xff0c;您可以從 Maven 倉庫下載最新或指定版本的…

【LangChain】存儲與管理對話歷史

0. 代碼演示 from langchain_community.chat_message_histories import SQLChatMessageHistorydef get_session_history(session_id):# 通過 session_id 區分對話歷史&#xff0c;并存儲在 sqlite 數據庫中return SQLChatMessageHistory(session_id, "sqlite:///memory.d…

從0開始的操作系統手搓教程21:進程子系統的一個核心功能——簡單的進程切換

目錄 具體說說我們的簡單RR調度 處理時鐘中斷處理函數 調度器 schedule switch_to 我們下面&#xff0c;就要開始真正的進程切換了。在那之前&#xff0c;筆者想要說的是——我們實現的進程切換簡單的無法再簡單了——也就是實現一個超級簡單的輪詢調度器。 每一個進程按照…

mysql新手常見問題解決方法總結

1. 安裝與配置問題 1.1 無法安裝MySQL Server MySQL Server安裝失敗是新手常見的問題之一&#xff0c;以下是具體原因及解決方案&#xff1a; 系統要求不滿足&#xff1a;MySQL對操作系統有最低版本要求&#xff0c;如Windows 7 SP1及以上、macOS 10.13及以上。若系統版本過…

數字組合(信息學奧賽一本通-1291)

【題目描述】 有n個正整數&#xff0c;找出其中和為t(t也是正整數)的可能的組合方式。如&#xff1a;n5,5個數分別為1,2,3,4,5&#xff0c;t5&#xff1b;那么可能的組合有514和523和55三種組合方式。 【輸入】 輸入的第一行是兩個正整數n和t&#xff0c;用空格隔開&#xff0c…

搜索引擎(基于java在線文檔)

背景&#xff1a; 基于java文檔的搜索引擎&#xff0c;可以輸入搜索詞&#xff0c;然后就可以查詢出與搜索詞相關的文檔。該項目的最主要的工作是要構建索引&#xff0c;就是正排和倒排索引。正排索引&#xff1a;根據文檔id獲取到文檔&#xff1b;倒排索引&#xff1a;根據搜…

【每日學點HarmonyOS Next知識】web滾動、事件回調、selectable屬性、監聽H5內部router、Grid嵌套時高度設置

【每日學點HarmonyOS Next知識】web滾動、事件回調、selectable屬性、監聽H5內部router、Grid嵌套時高度設置 1、HarmonyOS WebView加載url無法滾動&#xff1f; scroll 里面嵌套webView&#xff0c;demo參考&#xff1a; // xxx.ets import web_webview from ohos.web.webv…

Flink性能指標詳解MetricsAnalysis

文章目錄 Flink 組成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 組成 1.JobManager 管理任務 作業調度&#xff1a;負責接收和調度作業&#xff0c;分配任務到 TaskManager。資源管理&#xff1a;…