(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

news2025/1/20 7:10:48

文章目录

  • 一:图像描述概述
    • (1)图像描述
    • (2)描述子
  • 二:特征点
    • (1)Moravec角点检测
      • A:原理
      • B:程序
    • (2)Harris角点检测
      • A:原理
      • B:程序
    • (3)SUSAN角点检测
      • A:原理
      • B:程序

一:图像描述概述

(1)图像描述

图像描述:将分割后区域的区域、边界的属性和相互关系用更为简单明确的文字、数值、符号或图来描述或说明。保留原图像或图像区域重要信息,减少数据量。它旨在通过自然语言来准确地描述图像中出现的对象、场景和其他相关信息。图像描述一般由计算机视觉和自然语言处理领域共同完成。图像描述的主要目标是使计算机能够理解和表达对图像的理解,将视觉信息转化为可读性强的文本描述。这项技术对于提高图像的可搜索性和可索引性非常有用,也可以帮助视觉障碍者理解图像内容

在这里插入图片描述

图像描述技术的应用非常广泛。例如,在社交媒体平台上,可以通过图像描述实现自动标签生成,提高图像搜索的效果。此外,还可以应用于辅助无障碍技术、智能推荐系统等领域,为用户提供更好的体验和服务

(2)描述子

描述子:是计算机视觉领域中用于表示图像或图像中的特征的一种数值化描述方法。它提取图像中的关键信息,并将其转化为可以进行比较和匹配的向量或特征向量。描述子在图像处理和计算机视觉任务中起着重要作用,如图像检索、目标识别、图像匹配等。通过使用描述子,可以将复杂的图像数据转换成紧凑且可度量的向量形式,从而方便进行图像之间的相似性计算和比较。常见的描述子包括

  • SIFT
  • SURF
  • ORB

描述子应具有以下特点

  • 唯一性
  • 几何变换不变性
  • 完整性
  • 敏感性
  • 抽象性

描述子的生成通常涉及到特征提取算法,这些算法会在图像中寻找图像的局部特征,并将其转换为具有良好鲁棒性和区分性的描述子。这些描述子通常具有以下特点:对尺度、旋转和光照变化具有一定的不变性;在不同图像中相同物体的描述子能够相互匹配;不同物体的描述子能够有较大的差异性描述子在计算机视觉领域中被广泛应用,它们为图像处理和分析提供了有效的工具,可以实现图像特征的提取、匹配和识别等任务

二:特征点

特征点:也称为关键点(Key Points)或兴趣点(Interest Points),是图像中具有显著性、独特性和稳定性的位置或区域。它们在图像中代表了一些突出的结构、边缘或纹理信息。如线条交叉点、边界封闭区域的重心,或者曲面的高点等;也可以没有实际的直观视觉意义,但在某种角度、某个尺度上含有丰富的易于匹配的信息。特征点具有以下特点

  • 显著性:特征点应该在图像中相对其他区域更加明显和突出,能够吸引注意力。
  • 独特性:特征点应该具有较高的不变性,能够在不同的图像中准确地找到对应的特征点。
  • 稳定性:特征点应该对于尺度、旋转、仿射变换等图像变化具有一定程度的稳定性

特征点在影像匹配、图像拼接、运动估计以及形状描述等诸多方面都具有重要作用。特征点通常由特征检测算法自动提取,这些算法可以根据图像的局部特征属性来确定特征点的位置和尺度。常见的特征点检测算法包括Harris角点检测、SIFT(Scale-Invariant Feature Transform)、SURF(Speeded-Up Robust Features)等

角点是特征点中最主要的一类,由景物曲率较大地方的两条或多条边缘的交点所形成,比如线段的末端、轮廓的拐角等

(1)Moravec角点检测

A:原理

Moravec角点检测:是一种经典的图像特征检测算法,用于检测图像中的角点。Moravec角点检测算法基于角点的一个重要特性:在角点处,图像在各个方向上的微小平移都会引起较大的灰度变化。算法通过滑动窗口在图像中的每个像素位置上进行操作,计算不同方向上窗口内的灰度差异来确定是否存在角点,具体步骤如下

  • 对于图像中的每个像素位置,定义一个小的窗口
  • 分别在水平、垂直和对角线方向上对窗口进行平移,并计算平移后窗口与原窗口之间的灰度差异
  • 对于每个平移方向,计算灰度差异的总和或平均值,作为该窗口位置上的角点响应值
  • 针对所有像素位置,根据角点响应值进行阈值处理或非极大值抑制,筛选出最显著的角点

Moravec角点检测算法的优点是简单、快速,适用于实时应用和计算资源受限的场景。然而,它对于尺度变化、噪声和旋转等因素比较敏感,并且可能会产生大量的冗余角点。因此,后续的改进算法如Harris角点检测算法等被提出,以提高角点检测的稳定性和鲁棒性。另外

  • 当固定窗口在平坦区域时,灰度比较均匀,4个方向的灰度变化值都很小
  • 在边缘处,沿边缘方向的灰度变化值很小,沿垂直边缘方向的灰度变化值比较大
  • 当窗口在角点或独立点上的时候,沿各个方向的灰度变化值都比较大
  • 因此,若某窗口内各个方向变化的最小值大于某个阈值,说明各方向的变化都比较大,则该窗口所在即为角点所在

B:程序

如下

在这里插入图片描述


matlab实现

clear,clc,close all;
% image=im2double(rgb2gray(imread('bricks.jpg')));
% image= im2double(rgb2gray(imread('bricksrotate.jpg')));
 image= im2double(rgb2gray(imread('testrotate.bmp')));
figure,imshow(image),title('ԭͼ');
[N,M]=size(image);
radius=3;
CRF=zeros(N,M);
for i=radius+1:M-radius
    for j=radius+1:N-radius
        v=zeros(4,1);
        for m=-radius:radius-1
            v(1)=v(1)+(image(j,i+m)-image(j,i+m+1))^2;
            v(2)=v(2)+(image(j+m,i)-image(j+m+1,i))^2;
            v(3)=v(3)+(image(j+m,i+m)-image(j+m+1,i+m+1))^2;
            v(4)=v(4)+(image(j+m,i-m)-image(j+m+1,i-m-1))^2;
        end
        CRF(j,i)=min(v(:));
    end
end
thresh=0.08;
for i=radius+1:M-radius
    for j=radius+1:N-radius   
        temp=CRF(j-radius:j+radius,i-radius:i+radius);
        if CRF(j,i)>thresh && CRF(j,i)==max(temp(:))
            for m=-radius:radius
                image(j+m,i+m)=0;
                image(j-m,i+m)=0; 
            end
        end        
    end
end
figure,imshow(image),title('Moravec½¹µã¼ì²â');
imwrite(image,'Moravetestrotate.jpg');
          

python实现

import numpy as np
import cv2
import matplotlib.pyplot as plt

# Load and convert the image to grayscale
image = cv2.imread('testrotate.bmp')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = image.astype(np.float32)

# Display the original image
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.show()

N, M = image.shape
radius = 3
CRF = np.zeros((N, M))

# Calculate the Corner Response Function (CRF)
for i in range(radius, M-radius):
    for j in range(radius, N-radius):
        v = np.zeros(4)
        for m in range(-radius, radius):
            v[0] += (image[j, i+m] - image[j, i+m+1]) ** 2
            v[1] += (image[j+m, i] - image[j+m+1, i]) ** 2
            v[2] += (image[j+m, i+m] - image[j+m+1, i+m+1]) ** 2
            v[3] += (image[j+m, i-m] - image[j+m+1, i-m-1]) ** 2
        CRF[j, i] = np.min(v)

thresh = 0.08

# Suppress non-maximum corners
for i in range(radius, M-radius):
    for j in range(radius, N-radius):
        temp = CRF[j-radius:j+radius, i-radius:i+radius]
        if CRF[j, i] > thresh and CRF[j, i] == np.max(temp):
            for m in range(-radius, radius+1):
                image[j+m, i+m] = 0
                image[j-m, i+m] = 0

# Display the resulting image with suppressed corners
plt.imshow(image, cmap='gray')
plt.title('Moravec Corner Detection')
plt.show()

# Save the resulting image
cv2.imwrite('Moravetestrotate.jpg', image)

(2)Harris角点检测

A:原理

Harris角点检测:是一种常用的图像特征检测算法,用于寻找图像中的角点。Harris角点检测算法基于以下假设:在角点处,图像在所有方向上进行微小平移时,灰度值会发生较大的变化。该算法通过计算图像局部区域的灰度值梯度来判断是否存在角点,并根据灰度值梯度的变化情况计算角点响应函数。具体步骤如下

  • 对图像进行灰度处理(若原图不是灰度图)
  • 计算每个像素位置上的梯度值,通常使用Sobel算子或其他梯度算子
  • 根据梯度值计算自相关矩阵M,包括梯度的协方差矩阵
  • 根据自相关矩阵M的特征值,计算角点响应函数R
  • 根据设定的阈值,选取响应函数大于阈值的像素点作为角点
  • 对于相邻的角点,进行非极大值抑制,保留具有最大响应的角点

Harris角点检测算法的优点是对于尺度变化、旋转和仿射变换等具有一定的不变性,并且能够检测到各种类型的角点。它在图像配准、目标跟踪、图像拼接等计算机视觉任务中得到广泛应用

B:程序

如下

在这里插入图片描述


matlab实现

clear,clc,close all;
image= im2double(rgb2gray(imread('bricks.jpg')));
% image= im2double(rgb2gray(imread('bricksrotate.jpg')));
% image= im2double(rgb2gray(imread('testrotate.bmp')));
figure,imshow(image),title('原图');
[h,w]=size(image);
Hx = [-2 -1 0 1 2]; % x方向梯度算子(用于Harris角点提取算法) 
fx = filter2(Hx,image); % x方向滤波 
Hy = [-2;-1;0;1;2]; % y方向梯度算子(用于Harris角点提取算法) 
fy = filter2(Hy,image); % y方向滤波 
fx2 = fx.^2; 
fy2 = fy.^2; 
fxy = fx.*fy; 
sigma=2;
Hg= fspecial('gaussian',[7 7],sigma);
fx2 = filter2(Hg,fx2); 
fy2 = filter2(Hg,fy2); 
fxy = filter2(Hg,fxy); 
result = zeros(h,w); 
R = zeros(h,w); 
k=0.06;
for i = 1:w 
    for j = 1:h 
        M = [fx2(j,i) fxy(j,i);fxy(j,i) fy2(j,i)];
        detM = det(M); %求行列式
        traceM = trace(M); %求迹
        R(j,i) = detM-k*traceM^2;        
    end
end
radius=3;
num=0;
for i = radius+1:w-radius
    for j = radius+1:h-radius
        temp=R(j-radius:j+radius,i-radius:i+radius);
        if  R(j,i)==max(temp(:))
            result(j,i)=1;
            num=num+1;
        end       
    end
end
Rsort=zeros(num,1); 
[posy, posx] = find(result == 1); 
for i=1:num
    Rsort(i)=R(posy(i),posx(i)); 
end
[Rsort,index]=sort(Rsort,'descend'); 
corner=24; 
for i=1:corner
    y=posy(index(i)); 
    x=posx(index(i)); 
    for m=-radius:radius
        image(y+m,x+m)=0;
        image(y-m,x+m)=0; 
    end
end
figure,imshow(image),title('Harris角点检测');
% imwrite(image,'Harristestrotate.jpg');

python实现

import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load and convert the image to grayscale
image = cv2.imread('bricks.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = image.astype(np.float32) / 255.0

# Display the original image
plt.imshow(image, cmap='gray')
plt.title('原图')
plt.show()

h, w = image.shape
Hx = np.array([-2, -1, 0, 1, 2])  # x方向梯度算子(用于Harris角点提取算法)
fx = cv2.filter2D(image, -1, Hx)  # x方向滤波
Hy = np.array([[-2], [-1], [0], [1], [2]])  # y方向梯度算子(用于Harris角点提取算法)
fy = cv2.filter2D(image, -1, Hy)  # y方向滤波
fx2 = fx ** 2
fy2 = fy ** 2
fxy = fx * fy
sigma = 2
Hg = cv2.getGaussianKernel(7, sigma)
fx2 = cv2.filter2D(fx2, -1, Hg)
fy2 = cv2.filter2D(fy2, -1, Hg)
fxy = cv2.filter2D(fxy, -1, Hg)
result = np.zeros((h, w))
R = np.zeros((h, w))
k = 0.06

for i in range(w):
    for j in range(h):
        M = np.array([[fx2[j, i], fxy[j, i]], [fxy[j, i], fy2[j, i]]])
        detM = np.linalg.det(M)  # 求行列式
        traceM = np.trace(M)  # 求迹
        R[j, i] = detM - k * traceM ** 2

radius = 3
num = 0
for i in range(radius + 1, w - radius):
    for j in range(radius + 1, h - radius):
        temp = R[j - radius : j + radius, i - radius : i + radius]
        if R[j, i] == np.max(temp):
            result[j, i] = 1
            num += 1

Rsort = np.zeros(num)
pos = np.where(result == 1)
for i in range(num):
    Rsort[i] = R[pos[0][i], pos[1][i]]

index = np.argsort(Rsort)[::-1]
corner = 24

for i in range(corner):
    y = pos[0][index[i]]
    x = pos[1][index[i]]
    for m in range(-radius, radius + 1):
        image[y + m, x + m] = 0
        image[y - m, x + m] = 0

# Display the resulting image with detected corners
plt.imshow(image, cmap='gray')
plt.title('Harris角点检测')
plt.show()

# Save the resulting image
cv2.imwrite('Harristestrotate.jpg', image * 255.0)

(3)SUSAN角点检测

A:原理

SUSAN角点检测:是一种常用的图像特征检测算法,用于寻找图像中的角点。SUSAN角点检测算法基于以下假设:在角点处,相邻像素的灰度值与中心像素的灰度值之间会存在明显的差异。该算法通过计算像素周围邻域内的灰度差异来判断是否存在角点,并根据邻域内像素的差异程度计算角点响应函数。具体步骤如下

  • 对图像进行**灰度处理(**若原图不是灰度图)
  • 选择一个合适的邻域大小(通常为37个像素点),以及一个阈值T,用于判断像素点是否为角点
  • 遍历图像上的每个像素点
  • 对于每个像素点,计算其周围邻域内像素与中心像素的灰度差异
  • 计算灰度差异小于阈值T的像素数目
  • 如果该数目小于某个预先设定的阈值K,则将该像素标记为角点

SUSAN角点检测算法的优点是对噪声和光照变化具有一定的鲁棒性,并且能够检测到各种类型的角点。它在图像配准、目标跟踪、特征提取等计算机视觉任务中得到广泛应用

B:程序

如下

在这里插入图片描述


matlab实现

clear,clc,close all;
% image=im2double(rgb2gray(imread('bricks.jpg')));
% image= im2double(rgb2gray(imread('bricksrotate.jpg')));
% image= im2double(rgb2gray(imread('test.bmp')));
image= im2double(rgb2gray(imread('testrotate.bmp')));
figure,imshow(image),title('ԭͼ');
[N,M]=size(image);
templet=[0 0 1 1 1 0 0;0 1 1 1 1 1 0;1 1 1 1 1 1 1;1 1 1 1 1 1 1;1 1 1 1 1 1 1;0 1 1 1 1 1 0;0 0 1 1 1 0 0];
g=floor(sum(templet(:))/2-1);
R=zeros(N,M);
thresh=(max(image(:))-min(image(:)))/10;
radius=3;
for i=radius+1:M-radius
    for j=radius+1:N-radius
        count=0;
        usan=zeros(2*radius+1,2*radius+1);
        for m=-radius:radius
            for n=-radius:radius
                if templet(radius+1+n,radius+1+m)==1 && abs(image(j,i)-image(j+n,i+m))<thresh
                    count=count+1;
                    usan(radius+1+n,radius+1+m)=1;
                end                
            end            
        end        
        if count<g && count>5
            centerx=0;centery=0;totalgray=0;
            for m=-radius:radius
                for n=-radius:radius
                    if usan(radius+1+n,radius+1+m)==1 
                        centerx=centerx+(i+m)*image(j+n,i+m);
                        centery=centery+(j+n)*image(j+n,i+m);
                        totalgray=totalgray+image(j+n,i+m);
                    end                   
                end                
            end  
            centerx=centerx/totalgray;
            centery=centery/totalgray;
            dis=sqrt((i-centerx)^2+(j-centery)^2);
            if dis>radius*sqrt(2)/3
                 R(j,i)=g-count;
            end
        end
    end
end
for i=radius+1:M-radius
    for j=radius+1:N-radius    
        temp=R(j-radius:j+radius,i-radius:i+radius);
        if R(j,i)~=0 && R(j,i)==max(temp(:))
            for m=-radius:radius
                image(j+m,i+m)=0;
                image(j-m,i+m)=0;
            end
        end        
    end
end
figure,imshow(image),title('SUSAN½Çµã¼ì²â');
imwrite(image,'Susantestrotate.jpg');
          

python实现

import cv2
import numpy as np
import matplotlib.pyplot as plt

# Load and convert the image to grayscale
image = cv2.imread('testrotate.bmp')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = image.astype(np.float32) / 255.0

# Display the original image
plt.imshow(image, cmap='gray')
plt.title('原图')
plt.show()

N, M = image.shape
templet = np.array([[0, 0, 1, 1, 1, 0, 0],
                    [0, 1, 1, 1, 1, 1, 0],
                    [1, 1, 1, 1, 1, 1, 1],
                    [1, 1, 1, 1, 1, 1, 1],
                    [1, 1, 1, 1, 1, 1, 1],
                    [0, 1, 1, 1, 1, 1, 0],
                    [0, 0, 1, 1, 1, 0, 0]])
g = int(np.sum(templet) / 2 - 1)
R = np.zeros((N, M))
thresh = (np.max(image) - np.min(image)) / 10
radius = 3

for i in range(radius + 1, M - radius):
    for j in range(radius + 1, N - radius):
        count = 0
        usan = np.zeros((2 * radius + 1, 2 * radius + 1))
        
        for m in range(-radius, radius):
            for n in range(-radius, radius):
                if templet[radius + 1 + n, radius + 1 + m] == 1 and abs(image[j, i] - image[j + n, i + m]) < thresh:
                    count += 1
                    usan[radius + 1 + n, radius + 1 + m] = 1
        
        if count < g and count > 5:
            centerx = 0
            centery = 0
            totalgray = 0
            
            for m in range(-radius, radius):
                for n in range(-radius, radius):
                    if usan[radius + 1 + n, radius + 1 + m] == 1:
                        centerx += (i + m) * image[j + n, i + m]
                        centery += (j + n) * image[j + n, i + m]
                        totalgray += image[j + n, i + m]
            
            centerx /= totalgray
            centery /= totalgray
            dis = np.sqrt((i - centerx) ** 2 + (j - centery) ** 2)
            
            if dis > radius * np.sqrt(2) / 3:
                R[j, i] = g - count

for i in range(radius + 1, M - radius):
    for j in range(radius + 1, N - radius):
        temp = R[j - radius : j + radius, i - radius : i + radius]
        
        if R[j, i] != 0 and R[j, i] == np.max(temp):
            for m in range(-radius, radius):
                image[j + m, i + m] = 0
                image[j - m, i + m] = 0

# Display the resulting image with detected corners
plt.imshow(image, cmap='gray')
plt.title('SUSAN角点检测')
plt.show()

# Save the resulting image
cv2.imwrite('Susantestrotate.jpg', image * 255.0)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/951225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YII项目在Docker中运行缓慢

缓慢问题分析 请求YII的api时间请求原生查询时间win10 上运行docker上的php api异常慢ubuntu 中拉代码git报错 请求YII的api时间 请求原生查询时间 win10 上运行docker上的php api异常慢 链接阿里数据的 入口直接返回的 网上有说是docker的dns解析慢&#xff1b; 也有说是…

方面级别情感分析之四元组预测

情感四元组预测现有方法 阅读本文之前我们默认你对情感分析有基本的认识。 如果没有请阅读文章(https://tech.tcl.com/post/646efb5b4ba0e7a6a2da6476) 情感分析四元组预测涉及四个情感元素: 方面术语a&#xff0c;意见术语(也叫观点术语)o&#xff0c; 方面类别ac&#xff0c…

使用python对光谱数据进行lorentz峰值拟合

1、lorentz峰值拟合 发光光谱是一种用于表征二维半导体材料光学性质的重要技术&#xff0c;它可以反映出材料中的载流子密度、缺陷态、激子束缚能等信息。 由于二维半导体材料的厚度极其薄&#xff0c;其发光信号往往很弱&#xff0c;且受到基底、环境和测量设备等因素的干扰…

访问学者如何办理延期回国

近年来&#xff0c;随着国际交流的不断深入&#xff0c;越来越多的学者选择走出国门&#xff0c;到异国他乡进行访问学习。然而&#xff0c;有时由于研究项目进展或个人原因&#xff0c;访问学者可能需要延期回国。那么&#xff0c;访问学者在延期回国时应该如何办理手续呢&…

[Go版]算法通关村第十五关黄金——继续研究超大规模数据场景的问题

目录 题目&#xff1a;对20GB文件进行排序解决思路&#xff1a;外部排序 两两合并 题目&#xff1a;超大文本中搜索两个单词的最短距离解决思路&#xff1a;双指针法复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1) 题目&#xff1a;从10亿数字…

ChatGPT AIGC 一个指令总结Python所有知识点

在ChatGPT中,直接输入一个指令就可以生成Python的所有知识点大纲。 非常实用的ChatGPT功能。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.…

优秀产品经理的产品定位策略

产品定位是指在产品设计之初或在市场推广过程中&#xff0c;通过广告宣传等营销手段&#xff0c;使得产品在消费者心中确立具体形象的过程。这样有利于目标用户快速决策选择该产品。 如果没有明确的产品定位或产品定位模糊不清&#xff0c;目标用户对该产品印象不深刻&#xff…

干货丨软件测试行业迎来新时代,AI将成为主流技术?

随着科技日新月异的发展&#xff0c;人工智能正逐渐渗透到我们生活的各方各面&#xff0c;从智能语音助手到自动驾驶汽车、从智能家居到人脸识别技术&#xff0c;AI正以其卓越的智能和学习能力引领着新时代的发展方向。 在这个快速演进的时代中&#xff0c;软件测试领域也受到了…

STM32单片机示例:64位全局时间戳发生器

文章目录 目的基础说明测试代码总结示例链接 目的 STM32H743 / H750 系列的芯片有一个64位的全局时间戳发生器&#xff08; Global timestamp generator &#xff09;&#xff0c;这篇文章将对它的使用做个记录。 基础说明 全局时间戳发生器相关的内容可以参考官方参考手册&…

如何解决高并发中的I/O瓶颈?

我们都知道&#xff0c;在当前的大数据时代背景下&#xff0c;I/O的速度比内存要慢&#xff0c;尤其是性能问题与I/O相关的问题更加突出。 在许多应用场景中&#xff0c;I/O读写操作已经成为系统性能的一个重要瓶颈&#xff0c;这是不能忽视的。 什么是I/O&#xff1f; I/O作为…

基于RabbitMQ的模拟消息队列之四——内存管理

文章目录 一、设计数据结构二、管理集合1.交换机2.队列3.绑定4.消息5.队列上的消息6.待确认消息7.恢复数据 一、设计数据结构 针对交换机、队列、绑定、消息、待确认消息设计数据结构。 交换机集合 exchangeMap 数据结构&#xff1a;ConcurrentHashMap key:交换机name value:交…

视频剪辑高手揭秘:如何巧妙改变尺寸,打造完美画面

视频剪辑高手揭秘&#xff1a;如何巧妙改变尺寸&#xff0c;打造完美画面 在数字媒体时代&#xff0c;视频剪辑已经成为一项至关重要的技能。不仅在专业电影制作领域&#xff0c;也在个人创作和社交媒体传播中发挥着重要作用。本文将向你介绍一位视频剪辑高手&#xff0c;并揭…

NIO原理浅析(二)

IO分类 阻塞和非阻塞 阻塞IO&#xff1a;用户空间引发内核空间的系统调用&#xff0c;需要内核IO操作彻底完成之后&#xff0c;返回值才会返回到用户空间&#xff0c;执行用户的操作。阻塞指的用户空间程序的执行状态&#xff0c;用户空间程序需要等到IO操作彻底执行完毕。j…

《关键跨越:从业务高手到优秀主管》:最大化团队产出

作者&#xff1a;北森人才管理研究院 阅读时长&#xff1a;6小时21分钟 评分&#xff1a;5星 失控最鲜明的特征之一是管理者工作的时间越来越长&#xff0c;但结果越来越糟。很多新手管理者看到下属无法完成任务&#xff0c;或者担心出错&#xff0c;对下属不放心&#xff0c;出…

Linux学习之RAID删除

参考《Linux软件raid删除》 我部署 RAID的步骤在《Linux学习之RAID》 sudo umount /dev/md0先进行卸载。 sudo mdadm -S /dev/md0停止/dev/md0。 sudo mdadm -A -s /dev/md0可以重新开始/dev/md0&#xff0c;这里只是拓展一下。 sudo mdadm -S /dev/md0停止/dev/md0。 s…

Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置

文章目录 需求分析解决 需求 Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置 分析 在搜寻多种解决方案后&#xff0c;最后总结出 自己的解决方案 方案一&#xff0c;没看懂 var geojsonOptions {clampToGround : true //使数据贴地};var entities;promise Cesium…

详解产品项目管理软件:介绍与比较

产品项目管理是指通过有效的规划、组织和控制来管理产品开发过程的一系列活动。它涵盖了需求分析、产品设计、开发、测试以及上市等不同阶段&#xff0c;并需要协调多个团队成员的工作。通过产品项目管理&#xff0c;团队可以更好地把握产品的战略目标、工作进度和资源分配&…

Oracle-day6:over()函数

目录 一、over()开窗函数 二、无参over()的使用 三、over(partition by 列名) 四、over(order by 列名 asc/desc) 五、over(partition by 列名 order by 列名 asc|desc) 六、练习&#xff08;笔试&#xff09; 一、over()开窗函数 拓展:数据库的版本 oracle:8i 9i 10g …

ICCV 2023 | 小鹏汽车纽约石溪:局部上下文感知主动域自适应LADA

摘要 主动域自适应&#xff08;ADA&#xff09;通过查询少量选定的目标域样本的标签&#xff0c;以帮助模型从源域迁移到目标域。查询数据的局部上下文信息非常重要&#xff0c;特别是在域间差异较大的情况下&#xff0c;然而现有的ADA方法尚未充分探索这一点。在本文中&#…

六、事务-4.并发事务问题

一、脏读 事务A执行3个操作&#xff0c;第1个操作执行select语句&#xff0c;第2个操作执行update语句。 注意&#xff1a;事务没有执行完成的时候&#xff0c;事务是没有提交的。只有事务的3个操作完成之后&#xff0c;事务才会提交。 但事务A中第2个操作&#xff0c;会把表…