【圖像質量評價指標】圖像熵(Image Entropy) —— 熵值飽和現象

文章目錄

  • 一、圖像熵(Image Entropy)
    • (1)基本原理
    • (2)優勢與局限
    • (3)推薦策略
      • 多指標聯合推薦體系
      • 噪聲應對機制建議
  • 二、項目實戰 —— 通過圖像熵評價序列圖像,并提取最優圖像
    • (1)【先模擬,后計算】根據給定圖像,模擬數據生成(亮度+對比度),生成序列圖像
    • (2)【先模擬,后計算】在序列圖像中,提取圖像熵最大的圖像
    • (3)根據給定圖像,自動模擬亮度+對比度組合,提取圖像熵最大的圖像 —— 將前兩個功能合并
  • 三、熵值飽和 —— 存在多個最優值
    • (1)為什么會出現熵值飽和?
    • (2)如何應對熵值飽和現象?

一、圖像熵(Image Entropy)

圖像熵是一種源自信息論的度量指標,用于衡量圖像中灰度分布的復雜性與信息量,常用于圖像質量評價、對比度增強評估與自動參數選擇。

  • 熵值高:灰度分布復雜,細節豐富,信息量大;
  • 熵值低:灰度集中,圖像可能存在模糊、過曝或過暗現象,結構信息有限。

圖像熵(Image Entropy)和信息熵(Information Entropy)在理論本質上是一致的:圖像熵是將信息熵應用于灰度圖像像素分布的一種方式。

(1)基本原理

圖像熵定義:
H=?∑i=0L?1pilog?2piH = - \sum_{i=0}^{L-1} p_i \log_2 p_i \, H=?i=0L?1?pi?log2?pi?

  • HHH 為圖像熵,即整幅圖像灰度概率分布的信息平均量;
  • LLL 是灰度級數;
  • pip_ipi? 是灰度級為 iii 的像素概率分布,滿足歸一化條件 ∑i=0L?1pi=1\sum_{i=0}^{L-1} p_i = 1i=0L?1?pi?=1
  • pi=0p_i = 0pi?=0 時,定義 pilog?2pi=0p_i \log_2 p_i = 0pi?log2?pi?=0,以保證計算的連續性和數學合理性。

(2)優勢與局限

熵值不能作為圖像增強效果評價的唯一依據。

項目描述
? 優勢對灰度分布變化敏感,適用于無監督圖像增強場景,能反映增強后信息量變化趨勢
?? 局限1(熵值飽和)當增強超過一定閾值后,熵值可能不再增加甚至出現多個最大值重復,即“熵值飽和”,此時圖像可能已過曝或細節損毀
?? 局限2(噪聲敏感)圖像噪聲會顯著提升熵值,因為噪聲本身會增加像素灰度的不確定性,從而產生誤導性高熵,掩蓋真實的結構細節變化

關于噪聲的影響說明:

  • 噪聲使圖像灰度分布變得更加“隨機化”,從而人為抬高熵值;
  • 在低對比度或高增益場景中,噪聲貢獻可能占主導;
  • 特別是在電鏡圖像、醫學影像等領域,高熵并不意味著高質量,而可能是噪聲主導的“偽豐富”。

(3)推薦策略

為克服圖像增強過程中的“熵值飽和”與“噪聲誤導”等問題,建議構建多指標聯合評價機制,以實現增強參數的穩健選優。

多指標聯合推薦體系

指標類型主要衡量維度功能說明
圖像熵(Entropy)信息豐富度反映圖像灰度分布復雜程度
灰度標準差(Std)對比度變化程度捕捉亮度范圍擴展趨勢
結構清晰度指標(如Laplacian方差)邊緣/細節保留情況評價圖像紋理與邊緣銳利度
主觀/判別模型評分任務適配性用于特定場景的個性化調整

通過這些指標的聯合判斷,可有效規避熵值飽和陷阱,提升增強參數選擇的判別性與穩定性。

噪聲應對機制建議

為降低噪聲對熵值的誤導作用,推薦在增強流程中引入如下控制策略:

  • 預處理降噪:對原始圖像先執行如中值濾波或雙邊濾波,抑制高頻噪聲后再進行熵值計算;
  • 可在圖像增強管線中,集成結構敏感指標與熵值聯合判定,形成更穩健的增強決策邏輯;
  • 對于噪聲主導的圖像,建議優先考慮清晰度或紋理一致性指標替代純熵值判斷。

二、項目實戰 —— 通過圖像熵評價序列圖像,并提取最優圖像

(1)【先模擬,后計算】根據給定圖像,模擬數據生成(亮度+對比度),生成序列圖像

在這里插入圖片描述

import cv2
import os
import numpy as npdef enhance_image(img, brightness=0.0, contrast=1.0):"""使用線性變換增強圖像:output = input × contrast + brightness"""img = img.astype(np.float32)enhanced = img * contrast + brightnessenhanced = np.clip(enhanced, 0, 255).astype(np.uint8)return enhanceddef process_separately(input_dir, brightness_list, contrast_list):"""分別對每張圖像進行亮度增強與對比度增強。每個圖像創建一個子目錄,其中包含 brightness/ 和 contrast/ 兩個子目錄。"""tif_files = [f for f in os.listdir(input_dir) if f.lower().endswith(".tif")]for filename in tif_files:import timestart = time.time()filepath = os.path.join(input_dir, filename)img = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)if img is None:print(f"? 無法讀取文件: {filename}")continuename = os.path.splitext(filename)[0]save_root = os.path.join(input_dir, name)brightness_dir = os.path.join(save_root, "brightness")contrast_dir = os.path.join(save_root, "contrast")os.makedirs(brightness_dir, exist_ok=True)os.makedirs(contrast_dir, exist_ok=True)# 亮度增強(固定對比度為1.0)for b in brightness_list:enhanced = enhance_image(img, brightness=b, contrast=1.0)save_path = os.path.join(brightness_dir, f"{b:.1f}.tif")cv2.imwrite(save_path, enhanced)# 對比度增強(固定亮度為0.0)for c in contrast_list:enhanced = enhance_image(img, brightness=0.0, contrast=c)save_path = os.path.join(contrast_dir, f"{c:.1f}.tif")cv2.imwrite(save_path, enhanced)print(f"? [分開處理] 已處理: {filename},耗時 {time.time() - start:.2f} 秒")def process_combined(input_dir, brightness_list, contrast_list):"""對每張圖像進行亮度+對比度組合增強。每張圖像創建一個子目錄,所有增強圖像統一保存在該目錄中。命名格式為:<contrast>_at_<brightness>.tif,例如 1.2_at_-5.0.tif"""tif_files = [f for f in os.listdir(input_dir) if f.lower().endswith(".tif")]for filename in tif_files:import timestart = time.time()filepath = os.path.join(input_dir, filename)img = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE)if img is None:print(f"? 無法讀取文件: {filename}")continuename = os.path.splitext(filename)[0]save_dir = os.path.join(input_dir, name)os.makedirs(save_dir, exist_ok=True)for b in brightness_list:for c in contrast_list:enhanced = enhance_image(img, brightness=b, contrast=c)save_name = f"b_{b:.1f}_and_c_{c:.1f}.tif"save_path = os.path.join(save_dir, save_name)cv2.imwrite(save_path, enhanced)print(f"? [組合處理] 已處理: {filename},耗時 {time.time() - start:.2f} 秒")# 模擬數據生成:遍歷文件夾下的所有文件,對每張圖像進行亮度+對比度組合增強 huo 分別對每張圖像進行亮度增強與對比度增強。
if __name__ == "__main__":input_dir = r"D:\py\BC\25052757812\demo"brightness_list = [round(float(b), 1) for b in np.arange(-100, 100.1, 5)]contrast_list = [round(float(c), 1) for c in np.arange(0.1, 2.1, 0.1)]print(f"亮度范圍: {brightness_list}")print(f"對比度范圍: {contrast_list}")# 使用其中一種處理方式process_separately(input_dir, brightness_list, contrast_list)  # 分開處理# process_combined(input_dir, brightness_list, contrast_list)  # 合并處理

(2)【先模擬,后計算】在序列圖像中,提取圖像熵最大的圖像

在這里插入圖片描述

import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
import redef compute_entropy(image):"""計算圖像熵"""hist = cv2.calcHist([image], [0], None, [256], [0, 256])hist = hist.ravel() / hist.sum()hist = hist[hist > 0]entropy = -np.sum(hist * np.log2(hist))return entropydef extract_number(filename):"""提取文件名中的數字(用于排序與x軸)"""match = re.search(r"[-+]?\d*\.\d+|\d+", filename)return float(match.group()) if match else float('inf')def show_image_entropy_curve(folder_path):"""遍歷圖像,計算熵值并繪制熵值曲線(支持多最大值)"""entropy_list = []x_vals = []best_entropy = -1best_images = []files = sorted([f for f in os.listdir(folder_path) if f.lower().endswith(".tif")],key=extract_number)for filename in files:img_path = os.path.join(folder_path, filename)img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)if img is None:continueentropy = compute_entropy(img)entropy_list.append(entropy)x_vals.append(filename)print(f"{filename} - 熵值: {entropy:.4f}")if entropy > best_entropy:best_entropy = entropybest_images = [filename]elif entropy == best_entropy:best_images.append(filename)# 打印最優圖像列表print(f"\n? 最大熵值: {best_entropy:.4f}")print("📌 最優圖像文件列表:")for fname in best_images:print(f"  → {fname}")# 繪制曲線圖save_path = os.path.join(folder_path, "entropy_curve.png")plt.figure(figsize=(8, 5))plt.plot(x_vals, entropy_list, marker='o', linestyle='-', color='blue')plt.title("Image Entropy Curve")plt.xlabel("Image filename value")plt.ylabel("Entropy")plt.grid(True)plt.xticks(rotation=45)plt.tight_layout()plt.savefig(save_path, dpi=300)plt.show()# 在序列圖像中,提取圖像熵最大的圖像(若有多個最大值,則同時列出)
if __name__ == "__main__":folder = r"D:\py\BC\25052757812\1-01"show_image_entropy_curve(folder)# ? (對比度)最大熵值: 6.4644 → 1.0.tif# ? (亮度度)最大熵值: 6.4644 → -5.0.tif → 0.0.tif

(3)根據給定圖像,自動模擬亮度+對比度組合,提取圖像熵最大的圖像 —— 將前兩個功能合并

import os
import cv2
import numpy as np
import matplotlib.pyplot as pltdef enhance_image(img, brightness=0.0, contrast=1.0):"""使用線性變換增強圖像:output = input × contrast + brightness"""img = img.astype(np.float32)enhanced = img * contrast + brightnessenhanced = np.clip(enhanced, 0, 255).astype(np.uint8)return enhanceddef compute_entropy(image):"""計算圖像的熵值(衡量信息量)"""hist = cv2.calcHist([image], [0], None, [256], [0, 256])hist = hist.ravel() / hist.sum()hist = hist[hist > 0]entropy = -np.sum(hist * np.log2(hist))return entropydef find_best_brightness_contrast(image_path, brightness_range, contrast_range, save_dir):"""對單張圖像進行亮度+對比度組合增強,計算每一張增強圖像的熵值,找出熵值最大的組合,并輸出最佳增強圖像"""os.makedirs(save_dir, exist_ok=True)img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)if img is None:raise FileNotFoundError(f"? 無法讀取圖像: {image_path}")entropy_list = []label_list = []best_entropy = -1best_params = (0.0, 1.0)best_image = Nonefor b in brightness_range:for c in contrast_range:enhanced = enhance_image(img, brightness=b, contrast=c)entropy = compute_entropy(enhanced)label = f"{c:.1f}_at_{b:.1f}"entropy_list.append(entropy)label_list.append(label)if entropy > best_entropy:best_entropy = entropybest_params = (b, c)best_image = enhanced.copy()print(f"{label}.tif - 熵值: {entropy:.8f}")# 保存最優增強圖像best_filename = f"best_{best_params[1]:.1f}_at_{best_params[0]:.1f}.tif"best_path = os.path.join(save_dir, best_filename)cv2.imwrite(best_path, best_image)print(f"\n? 最優組合:亮度={best_params[0]:.1f},對比度={best_params[1]:.1f},最大熵={best_entropy:.8f}")print(f"📌 最優圖像已保存至: {best_path}")# # 繪制熵值曲線圖# curve_path = os.path.join(save_dir, "entropy_curve.png")# plt.figure(figsize=(10, 5))# plt.plot(label_list, entropy_list, marker='o', linestyle='-', color='blue')# plt.title("Entropy Curve for Brightness+Contrast Variations")# plt.xlabel("contrast_at_brightness")# plt.ylabel("Entropy")# plt.xticks(rotation=60)# plt.grid(True)# plt.tight_layout()# plt.savefig(curve_path, dpi=300)# plt.show()# 繪制前后對比圖plt.subplots(1, 2, figsize=(10, 5))plt.subplot(1, 2, 1), plt.imshow(img, cmap='gray', vmin=0, vmax=255), plt.title("Original Image"), plt.axis('off')plt.subplot(1, 2, 2), plt.imshow(best_image, cmap='gray', vmin=0, vmax=255), plt.title(f"Best Image\nBrightness={best_params[0]:.1f}, Contrast={best_params[1]:.1f}"), plt.axis('off')plt.tight_layout()plt.show()def find_best_sequentially(image_path, brightness_range, contrast_range, save_dir):"""分階段尋找最優亮度與對比度:1. 在原圖上逐個亮度值增強,選擇熵值最高者;2. 在最優亮度圖上,逐個對比度增強,選擇熵值最高者;3. 返回最終增強圖像并保存。"""os.makedirs(save_dir, exist_ok=True)img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)if img is None:raise FileNotFoundError(f"? 無法讀取圖像: {image_path}")# 階段一:亮度優化max_entropy_brightness = -1best_brightness = 0.0img_after_brightness = Nonefor b in brightness_range:temp = enhance_image(img, brightness=b, contrast=1.0)entropy = compute_entropy(temp)print(f"[亮度階段] brightness={b:.1f} → 熵值: {entropy:.8f}")if entropy > max_entropy_brightness:max_entropy_brightness = entropybest_brightness = bimg_after_brightness = temp.copy()# 階段二:對比度優化(基于最優亮度圖像)max_entropy_contrast = -1best_contrast = 1.0best_image = Nonefor c in contrast_range:temp = enhance_image(img_after_brightness, brightness=0.0, contrast=c)entropy = compute_entropy(temp)print(f"[對比度階段] contrast={c:.1f} → 熵值: {entropy:.8f}")if entropy > max_entropy_contrast:max_entropy_contrast = entropybest_contrast = cbest_image = temp.copy()# 保存最優圖像best_filename = f"best_seq_{best_contrast:.1f}_at_{best_brightness:.1f}.tif"best_path = os.path.join(save_dir, best_filename)cv2.imwrite(best_path, best_image)print(f"\n? 最優組合(分階段):亮度(0.0)={best_brightness:.1f},對比度(1.0)={best_contrast:.1f}")print(f"📌 最終圖像已保存至: {best_path}")# 可視化# cv2.imshow('image', img)# cv2.imshow("Best Sequential", best_image)# cv2.waitKey(0)# cv2.destroyAllWindows()# plt.figure(figsize=(10, 5))# plt.subplot(1, 2, 1)# plt.imshow(img, cmap='gray', vmin=0, vmax=255)# plt.title("Original Image")# plt.axis('off')# plt.subplot(1, 2, 2)# plt.imshow(best_image, cmap='gray', vmin=0, vmax=255)# plt.title(f"Best Sequential\nBrightness={best_brightness:.1f}, Contrast={best_contrast:.1f}")# plt.axis('off')# plt.tight_layout()# plt.show()# 可視化增強前后圖像fig, axs = plt.subplots(2, 2, figsize=(12, 8))# 原圖axs[0, 0].imshow(img, cmap='gray', vmin=0, vmax=255)axs[0, 0].set_title("Original Image")axs[0, 0].axis('off')# 最優增強圖像axs[0, 1].imshow(best_image, cmap='gray', vmin=0, vmax=255)axs[0, 1].set_title(f"Best Sequential\nBrightness={best_brightness:.1f}, Contrast={best_contrast:.1f}")axs[0, 1].axis('off')# 亮度熵曲線brightness_entropy_curve = []for b in brightness_range:temp = enhance_image(img, brightness=b, contrast=1.0)entropy = compute_entropy(temp)brightness_entropy_curve.append(entropy)axs[1, 0].plot(brightness_range, brightness_entropy_curve, marker='o', color='orange')axs[1, 0].set_title("Entropy vs Brightness")axs[1, 0].set_xlabel("Brightness")axs[1, 0].set_ylabel("Entropy")axs[1, 0].grid(True)# 對比度熵曲線contrast_entropy_curve = []for c in contrast_range:temp = enhance_image(img_after_brightness, brightness=0.0, contrast=c)entropy = compute_entropy(temp)contrast_entropy_curve.append(entropy)axs[1, 1].plot(contrast_range, contrast_entropy_curve, marker='o', color='blue')axs[1, 1].set_title("Entropy vs Contrast")axs[1, 1].set_xlabel("Contrast")axs[1, 1].set_ylabel("Entropy")axs[1, 1].grid(True)plt.tight_layout()plt.show()# 根據給定圖像,自動模擬最優亮度+對比度組合,最終輸出適宜參數對應的圖像
if __name__ == "__main__":image_path = r"D:\py\BC\25052757812\1-01\b_25.0_and_c_1.3.tif"save_dir = r"D:\py\BC\best_result"brightness_list = [round(b, 1) for b in np.arange(-100, 50.1, 10)]contrast_list = [round(c, 1) for c in np.arange(0.1, 2, 0.1)]find_best_sequentially(image_path, brightness_list, contrast_list, save_dir)# find_best_brightness_contrast(image_path, brightness_list, contrast_list, save_dir)"""熵值飽和現象:[亮度階段] brightness=-100.0 → 熵值: 6.03479862[亮度階段] brightness=-90.0 → 熵值: 6.21303177[亮度階段] brightness=-80.0 → 熵值: 6.29660273[亮度階段] brightness=-70.0 → 熵值: 6.34630442[亮度階段] brightness=-60.0 → 熵值: 6.38321447[亮度階段] brightness=-50.0 → 熵值: 6.39664936[亮度階段] brightness=-40.0 → 熵值: 6.39753246[亮度階段] brightness=-30.0 → 熵值: 6.39753246[亮度階段] brightness=-20.0 → 熵值: 6.39753246[亮度階段] brightness=-10.0 → 熵值: 6.39753246[亮度階段] brightness=0.0 → 熵值: 6.39753246[亮度階段] brightness=10.0 → 熵值: 6.25879717[亮度階段] brightness=20.0 → 熵值: 6.08924246[亮度階段] brightness=30.0 → 熵值: 5.83966589[亮度階段] brightness=40.0 → 熵值: 5.61335611[亮度階段] brightness=50.0 → 熵值: 5.31231403"""

三、熵值飽和 —— 存在多個最優值

在這里插入圖片描述

當對圖像施加一系列亮度或對比度變換時,熵值通常具有如下變化趨勢:

階段熵值行為圖像變化特征與分析
初始階段顯著上升圖像增強改善了灰度分布,細節變得豐富,整體信息量增加。熵值對增強操作敏感。
過渡階段逐漸趨穩圖像逐步接近灰度均衡狀態,信息冗余開始增加,熵值增長幅度減緩。
飽和階段進入平臺期圖像熵值達到局部最大,多組參數組合產生相同(或近似)最大熵,熵值不再上升。此時圖像可能已出現過曝或細節損失。

特征表現:

  • 熵值隨著增強強度增加,在某個范圍后趨于飽和不變,即“熵值飽和”;
  • 多個不同參數組合(如不同亮度或對比度)可能對應相同的最大熵;
  • 此時圖像視覺質量可能并未提升甚至下降,但熵值仍維持高位;
  • 熵值曲線常表現為**“增長—平緩—平臺”**的結構,平臺區為關鍵判斷區域。

例如:當 brightness = - 40.0 開始,熵值已達平臺期。

"""熵值飽和現象:
[亮度階段] brightness=-100.0 → 熵值: 6.03479862
[亮度階段] brightness=-90.0 → 熵值: 6.21303177
[亮度階段] brightness=-80.0 → 熵值: 6.29660273
[亮度階段] brightness=-70.0 → 熵值: 6.34630442
[亮度階段] brightness=-60.0 → 熵值: 6.38321447
[亮度階段] brightness=-50.0 → 熵值: 6.39664936[亮度階段] brightness=-40.0 → 熵值: 6.39753246
[亮度階段] brightness=-30.0 → 熵值: 6.39753246
[亮度階段] brightness=-20.0 → 熵值: 6.39753246
[亮度階段] brightness=-10.0 → 熵值: 6.39753246
[亮度階段] brightness=0.0 → 熵值: 6.39753246[亮度階段] brightness=10.0 → 熵值: 6.25879717
[亮度階段] brightness=20.0 → 熵值: 6.08924246
[亮度階段] brightness=30.0 → 熵值: 5.83966589
[亮度階段] brightness=40.0 → 熵值: 5.61335611
[亮度階段] brightness=50.0 → 熵值: 5.31231403
"""

(1)為什么會出現熵值飽和?

  • 數學原因:熵的本質是灰度分布的“均勻度”,不是圖像結構的好壞;
  • 圖像本質:熵不能識別紋理、邊緣、清晰度,僅統計灰度直方圖;
  • 在圖像過度增強(亮度過亮、對比度過大)時,熵可能“虛高”,稱為偽信息上升;
  • 此時雖然熵高,但信息質量低,表現為“信息泛濫、結構丟失”。
原因類別說明
灰度分布已飽和圖像經過增強后灰度直方圖已近似均勻,信息增量趨于0
噪聲主導當細節放大到一定程度后,熵值更多由噪聲貢獻,失去了評價意義
熵函數特性熵是統計平均指標,非局部敏感,不能細分紋理結構或形狀變化
圖像對比度極限OpenCV圖像灰度范圍為[0,255],增強超限后像素值截斷、飽和,導致圖像內容變得“平整”

(2)如何應對熵值飽和現象?

在圖像增強任務中,熵值雖是一個良好的全局評價指標,但并非萬能。推薦如下做法:

  • 多指標融合判斷:
    • 熵值:衡量信息量;
    • 灰度標準差:衡量對比度;
    • 局部方差或梯度均值:衡量局部細節清晰度;
    • SNR/BRISQUE等圖像質量評價指標。
  • 設置 " 首次最大值 " 策略:一旦熵值達到歷史最大并進入平臺段,可提前停止增強或使用其他指標繼續判斷;

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

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

相關文章

GaussDB in的用法

1 in的作用in運算符允許您在WHERE子句中指定多個值。 in運算符是多個OR條件的簡寫。2 in的語法select column_name(s) from table_name where column_name in (value1, value2, ...); 或者 select column_name(s) from table_name where column_name in (select statement);3 i…

【C語言進階】內存函數

目錄 1.memcpy函數 1.1 模擬實現 2.memmove函數 3.memcmp函數 1.memcpy函數 字符串拷貝strcpy和strncpy是有一定局限性的&#xff0c;只能拷貝字符串&#xff0c;而memcpy可以拷貝任意類型的數據&#xff0c;單位是字節。 1.1 模擬實現 #include<stdio.h> #include&l…

從亂序到整潔:Swift 實現奇偶鏈表重排的最佳方案

文章目錄摘要描述題解答案題解代碼分析分段講解示例測試及結果時間復雜度空間復雜度總結摘要 在開發中&#xff0c;鏈表結構經常出現在緩存淘汰、操作系統任務調度、或是 LRU 算法中&#xff0c;尤其是對節點位置的靈活操作更是鏈表的強項。LeetCode 第 328 題「奇偶鏈表」就給…

WPF+CEF 執行JS報錯

WPFCEF 執行JS報錯 在WPF中執行 webBrowser.EvaluateScriptAsync(“window.scrollBy(0, 1000);”); 在部分網站會報異常&#xff1a; Request BrowserId : XXXX not found it’s likely the browser is already closed環境 .Net Framework 4.7 CefSharp.Wpf 131.3.50 解決方案&…

【Python3-Django】快速掌握DRF:ModelViewSet實戰指南

DRF講解 1. 什么是 Django 和 Django REST Framework&#xff1f; 在深入 ModelViewSet 之前&#xff0c;我們先簡單了解一下背景知識&#xff1a; Django 是一個基于 Python 的 Web 開發框架&#xff0c;旨在幫助開發者快速構建安全、可擴展的 Web 應用。它遵循“不要重復自己…

TRAE IDE** 下載、安裝、開發、測試和部署 2048 小游戲的全流程指南

以下是一份完整的 TRAE IDE 下載、安裝、開發、測試和部署 2048 小游戲的全流程指南。整個過程基于 TRAE 作為 AI 輔助編程工具的特性&#xff08;對標 Cursor/AWS Kiro&#xff09;&#xff0c;假設它支持智能代碼生成和云部署功能。 【插播】騰訊云AI Coding大賽https://mar…

重學前端005 --- 響應式網頁設計 CSS 盒子模型

文章目錄BOX 盒子概念CSSoverflow: hidden;filter: blur(3px);box-shadow: 0 0 3px 3px #efb762;border-radius: 30px 25px 60px 12px;transform: rotate(-0.6deg);每個 HTML 元素都是一個盒子&#xff0c;它擁有著自己的間距和邊框。這叫作“盒子模型”。 BOX 盒子概念 內容…

TC500R立式加工中心主軸箱機械結構設計cad【11張】三維圖+設計說明書

TC500R立式加工中心主軸箱機械結構設計 摘 要 數控機床作為工業制造的基礎&#xff0c;在國家的發展中起著非常重要的作用。隨著我國經濟的快速發展&#xff0c;我國已經成為工業制造大國&#xff0c;制造業的發展離不開數控機床&#xff0c;而TC500R立式加工中心作為數控機床…

CSS Grid布局:構建現代網頁的強大網格系統

目錄 一、Grid布局基礎概念 1.1 網格容器與網格項 1.2 創建基本網格 二、核心屬性詳解 2.1 定義網格軌道 2.2 網格間距控制 2.3 網格項對齊方式 三、實戰布局技巧 3.1 創建經典布局 3.2 網格項定位技巧 3.3 響應式網格設計 四、Grid布局 vs Flexbox布局 五、高級…

Elasticsearch / MongoDB / Redis / MySQL 區別

1、一句話簡介名稱核心用途Elasticsearch強大的全文檢索與日志分析引擎MongoDB靈活的文檔數據庫&#xff0c;適合半結構化/結構化數據Redis高性能的內存鍵值緩存數據庫&#xff0c;用于實時高并發處理MySQL經典關系型數據庫&#xff0c;強事務支持&#xff0c;結構化數據持久存…

網絡通信之基礎知識

一、什么是計算機網絡&#xff1f;計算機網絡是指由若干主機、通信鏈路和網絡設備&#xff08;如路由器、交換機等&#xff09;組成的系統&#xff0c;借助通信協議&#xff0c;實現信息共享和資源互聯。其本質是&#xff1a;多臺設備之間通過協議進行數據交換。二、網絡協議與…

Java 設計模式及應用場景

Java 設計模式是解決軟件開發中常見問題的通用方案&#xff0c;通過合理的設計模式可以提高代碼的可維護性、可擴展性和復用性。下面將介紹 Java 中常見的設計模式及其原理。一、設計模式的分類設計模式主要分為三大類&#xff0c;共 23 種經典模式&#xff1a;創建型模式&…

GitHub Jekyll博客本地Win開發環境搭建

GitHub Jekyll博客本地Win開發環境搭建 標簽 后端 blog jekyll 全文鏈接 GitHub Jekyll博客本地Win開發環境搭建 概述 本文詳細介紹了在Windows系統上搭建Jekyll博客本地開發環境的完整步驟&#xff0c;為GitHub Pages博客開發提供本地預覽和調試能力。 環境依賴 Ruby環…

瀏覽器防錄屏是怎樣提高視頻安全性?

文章目錄前言一、什么是瀏覽器防錄屏二、瀏覽器防錄屏的原理是什么&#xff1f;&#xff08;javascript&#xff09;三、如何實現瀏覽器防錄屏總結前言 在數字內容版權保護面臨嚴峻挑戰的今天&#xff0c;瀏覽器防錄屏技術作為視頻安全體系的關鍵一環&#xff0c;其重要性日益…

uni-app項目配置通用鏈接拉起ios應用android應用

uniapp開發ios&android可拉起app的辛酸歷程IOS配置指南1、登錄[apple Developer](https://developer.apple.com/account/resources/identifiers/list)賬戶找到自己開發的對應的項目2、確保對應項目的Associated Domains是打開狀態3、本地創建一個 apple-app-site-associati…

deep learning(李宏毅)--(六)--loss

一&#xff0c;關于分類問題及其損失函數的一些討論。 在構建分類模型是&#xff0c;我們的最后一層往往是softmax函數&#xff08;起到歸一化的作用&#xff09;&#xff0c;如果是二分類問題也可以用sigmoid函數。 在loss函數的選擇上&#xff0c;一般采用交叉熵損失函數(…

Python綁定及其在Mujoco仿真器中的作用

好的&#xff0c;這是一個非常核心且重要的問題。我來分兩部分為你詳細解釋&#xff1a;首先是“什么是Python綁定”&#xff0c;然后是“它在MuJoCo中具體的作用”。第一部分&#xff1a;什么是Python綁定 (Python Binding)&#xff1f; 簡單來說&#xff0c;Python綁定是一座…

數學建模從入門到國獎——備賽規劃優秀論文學習方法

數學建模從入門到國獎——備賽規劃 數學建模國一&#xff1a;我的逆襲經驗分享在大二&#xff0c;我們團隊初次參加媽媽杯&#xff0c;遺憾未獲獎&#xff0c;后來經過5個月的時間&#xff0c;在大三上學期的9月&#xff0c;我們團隊以C題數據挖掘機器學習創新斬獲國賽一等獎&a…

大型語言模型的白日夢循環

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

【Gaussian Haircut論文】在Deepseek和Chatgpt的幫助下慢速了解核心方法

3.Method 一、 1.核心目標 輸入&#xff1a;多張從不同角度拍攝的頭發照片。輸出&#xff1a;3D發型模型&#xff0c;且模型由發絲構成&#xff08;即每根頭發被建模為獨立的曲線/線段&#xff0c;而非體積/網絡&#xff09;。 2.數據預處理 在正式重建前&#xff0c;需要從輸入…