水平集分割

article/2024/12/26 7:14:14

基于距离正则的水平集分割MATLAB代码,无需初始化

%  This Matlab code demonstrates an edge-based active contour model as an application of 
%  the Distance Regularized Level Set Evolution (DRLSE) formulation in the following paper:
%
%  C. Li, C. Xu, C. Gui, M. D. Fox, "Distance Regularized Level Set Evolution and Its Application to Image Segmentation", 
%     IEEE Trans. Image Processing, vol. 19 (12), pp. 3243-3254, 2010.
%
% Author: Chunming Li, all rights reserved
% E-mail: lchunming@gmail.com   
%         li_chunming@hotmail.com 
% URL:  http://www.imagecomputing.org/~cmli//
clear all;
close all;
Img=imread('gourd.bmp');
Img=double(Img(:,:,1));
%% parameter setting
timestep=1;  % time step
mu=0.2/timestep;  % coefficient of the distance regularization term R(phi)
iter_inner=5;
iter_outer=20;
lambda=5; % coefficient of the weighted length term L(phi)
alfa=-3;  % coefficient of the weighted area term A(phi)
epsilon=1.5; % papramater that specifies the width of the DiracDelta function
sigma=.8;    % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sigma); % Caussian kernel
Img_smooth=conv2(Img,G,'same');  % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f);  % edge indicator function.
% initialize LSF as binary step function
c0=2;
initialLSF = c0*ones(size(Img));
% generate the initial region R0 as two rectangles
initialLSF(25:35,20:25)=-c0; 
initialLSF(25:35,40:50)=-c0;
phi=initialLSF;
figure(1);
mesh(-phi);   % for a better view, the LSF is displayed upside down
hold on;  contour(phi, [0,0], 'r','LineWidth',2);
title('Initial level set function');
view([-80 35]);
figure(2);
imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');
title('Initial zero level contour');
pause(0.5);
potential=2;  
if potential ==1potentialFunction = 'single-well';  % use single well potential p1(s)=0.5*(s-1)^2, which is good for region-based model 
elseif potential == 2potentialFunction = 'double-well';  % use double-well potential in Eq. (16), which is good for both edge and region based models
elsepotentialFunction = 'double-well';  % default choice of potential function
end  
% start level set evolution
for n=1:iter_outerphi = drlse_edge(phi, g, lambda, mu, alfa, epsilon, timestep, iter_inner, potentialFunction);    if mod(n,2)==0figure(2);imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');end
end
% refine the zero level contour by further level set evolution with alfa=0
alfa=0;
iter_refine = 10;
phi = drlse_edge(phi, g, lambda, mu, alfa, epsilon, timestep, iter_inner, potentialFunction);
finalLSF=phi;
figure(2);
imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');
hold on;  contour(phi, [0,0], 'r');
str=['Final zero level contour, ', num2str(iter_outer*iter_inner+iter_refine), ' iterations'];
title(str);
figure;
mesh(-finalLSF); % for a better view, the LSF is displayed upside down
hold on;  contour(phi, [0,0], 'r','LineWidth',2);
view([-80 35]);
str=['Final level set function, ', num2str(iter_outer*iter_inner+iter_refine), ' iterations'];
title(str);
axis on;
[nrow, ncol]=size(Img);
axis([1 ncol 1 nrow -5 5]);
set(gca,'ZTick',[-3:1:3]);
set(gca,'FontSize',14)
%  This Matlab code demonstrates an edge-based active contour model as an application of 
%  the Distance Regularized Level Set Evolution (DRLSE) formulation in the following paper:
%
%  C. Li, C. Xu, C. Gui, M. D. Fox, "Distance Regularized Level Set Evolution and Its Application to Image Segmentation", 
%     IEEE Trans. Image Processing, vol. 19 (12), pp. 3243-3254, 2010.
%
% Author: Chunming Li, all rights reserved
% E-mail: lchunming@gmail.com   
%         li_chunming@hotmail.com 
% URL:  http://www.imagecomputing.org/~cmli//
clear all;
close all;
Img=imread('gourd.bmp');
Img=double(Img(:,:,1));
%% parameter setting
timestep=1;  % time step
mu=0.2/timestep;  % coefficient of the distance regularization term R(phi)
iter_inner=5;
iter_outer=20;
lambda=5; % coefficient of the weighted length term L(phi)
alfa=-3;  % coefficient of the weighted area term A(phi)
epsilon=1.5; % papramater that specifies the width of the DiracDelta function
sigma=.8;    % scale parameter in Gaussian kernel
G=fspecial('gaussian',15,sigma); % Caussian kernel
Img_smooth=conv2(Img,G,'same');  % smooth image by Gaussiin convolution
[Ix,Iy]=gradient(Img_smooth);
f=Ix.^2+Iy.^2;
g=1./(1+f);  % edge indicator function.
% initialize LSF as binary step function
c0=2;
initialLSF = c0*ones(size(Img));
% generate the initial region R0 as two rectangles
initialLSF(25:35,20:25)=-c0; 
initialLSF(25:35,40:50)=-c0;
phi=initialLSF;
figure(1);
mesh(-phi);   % for a better view, the LSF is displayed upside down
hold on;  contour(phi, [0,0], 'r','LineWidth',2);
title('Initial level set function');
view([-80 35]);
figure(2);
imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');
title('Initial zero level contour');
pause(0.5);
potential=2;  
if potential ==1potentialFunction = 'single-well';  % use single well potential p1(s)=0.5*(s-1)^2, which is good for region-based model 
elseif potential == 2potentialFunction = 'double-well';  % use double-well potential in Eq. (16), which is good for both edge and region based models
elsepotentialFunction = 'double-well';  % default choice of potential function
end  
% start level set evolution
for n=1:iter_outerphi = drlse_edge(phi, g, lambda, mu, alfa, epsilon, timestep, iter_inner, potentialFunction);    if mod(n,2)==0figure(2);imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');end
end
% refine the zero level contour by further level set evolution with alfa=0
alfa=0;
iter_refine = 10;
phi = drlse_edge(phi, g, lambda, mu, alfa, epsilon, timestep, iter_inner, potentialFunction);
finalLSF=phi;
figure(2);
imagesc(Img,[0, 255]); axis off; axis equal; colormap(gray); hold on;  contour(phi, [0,0], 'r');
hold on;  contour(phi, [0,0], 'r');
str=['Final zero level contour, ', num2str(iter_outer*iter_inner+iter_refine), ' iterations'];
title(str);
figure;
mesh(-finalLSF); % for a better view, the LSF is displayed upside down
hold on;  contour(phi, [0,0], 'r','LineWidth',2);
view([-80 35]);
str=['Final level set function, ', num2str(iter_outer*iter_inner+iter_refine), ' iterations'];
title(str);
axis on;
[nrow, ncol]=size(Img);
axis([1 ncol 1 nrow -5 5]);
set(gca,'ZTick',[-3:1:3]);
set(gca,'FontSize',14)
function phi = drlse_edge(phi_0, g, lambda,mu, alfa, epsilon, timestep, iter, potentialFunction)
%  This Matlab code implements an edge-based active contour model as an
%  application of the Distance Regularized Level Set Evolution (DRLSE) formulation in Li et al's paper:
%
%      C. Li, C. Xu, C. Gui, M. D. Fox, "Distance Regularized Level Set Evolution and Its Application to Image Segmentation", 
%        IEEE Trans. Image Processing, vol. 19 (12), pp.3243-3254, 2010.
%
%  Input:
%      phi_0: level set function to be updated by level set evolution
%      g: edge indicator function
%      mu: weight of distance regularization term
%      timestep: time step
%      lambda: weight of the weighted length term
%      alfa:   weight of the weighted area term
%      epsilon: width of Dirac Delta function
%      iter: number of iterations
%      potentialFunction: choice of potential function in distance regularization term. 
%              As mentioned in the above paper, two choices are provided: potentialFunction='single-well' or
%              potentialFunction='double-well', which correspond to the potential functions p1 (single-well) 
%              and p2 (double-well), respectively.%
%  Output:
%      phi: updated level set function after level set evolution
%
% Author: Chunming Li, all rights reserved
% E-mail: lchunming@gmail.com   
%         li_chunming@hotmail.com 
% URL:  http://www.imagecomputing.org/~cmli/
phi=phi_0;
[vx, vy]=gradient(g);
for k=1:iterphi=NeumannBoundCond(phi);[phi_x,phi_y]=gradient(phi);s=sqrt(phi_x.^2 + phi_y.^2);smallNumber=1e-10;  Nx=phi_x./(s+smallNumber); % add a small positive number to avoid division by zeroNy=phi_y./(s+smallNumber);curvature=div(Nx,Ny);if strcmp(potentialFunction,'single-well')distRegTerm = 4*del2(phi)-curvature;  % compute distance regularization term in equation (13) with the single-well potential p1.elseif strcmp(potentialFunction,'double-well');distRegTerm=distReg_p2(phi);  % compute the distance regularization term in eqaution (13) with the double-well potential p2.elsedisp('Error: Wrong choice of potential function. Please input the string "single-well" or "double-well" in the drlse_edge function.');end        diracPhi=Dirac(phi,epsilon);areaTerm=diracPhi.*g; % balloon/pressure forceedgeTerm=diracPhi.*(vx.*Nx+vy.*Ny) + diracPhi.*g.*curvature;phi=phi + timestep*(mu*distRegTerm + lambda*edgeTerm + alfa*areaTerm);
end
function f = distReg_p2(phi)
% compute the distance regularization term with the double-well potential p2 in eqaution (16)
[phi_x,phi_y]=gradient(phi);
s=sqrt(phi_x.^2 + phi_y.^2);
a=(s>=0) & (s<=1);
b=(s>1);
ps=a.*sin(2*pi*s)/(2*pi)+b.*(s-1);  % compute first order derivative of the double-well potential p2 in eqaution (16)
dps=((ps~=0).*ps+(ps==0))./((s~=0).*s+(s==0));  % compute d_p(s)=p'(s)/s in equation (10). As s-->0, we have d_p(s)-->1 according to equation (18)
f = div(dps.*phi_x - phi_x, dps.*phi_y - phi_y) + 4*del2(phi);  
function f = div(nx,ny)
[nxx,junk]=gradient(nx);  
[junk,nyy]=gradient(ny);
f=nxx+nyy;
function f = Dirac(x, sigma)
f=(1/2/sigma)*(1+cos(pi*x/sigma));
b = (x<=sigma) & (x>=-sigma);
f = f.*b;
function g = NeumannBoundCond(f)
% Make a function satisfy Neumann boundary condition
[nrow,ncol] = size(f);
g = f;
g([1 nrow],[1 ncol]) = g([3 nrow-2],[3 ncol-2]);  
g([1 nrow],2:end-1) = g([3 nrow-2],2:end-1);          
g(2:end-1,[1 ncol]) = g(2:end-1,[3 ncol-2]);  

LeveSet 水平集方法主要的思想是利用三维(高维)曲面的演化来表示二维曲线的演化过程。在计算机视觉领域,利用水平集方法可以实现很好的图像分割效果。

1.数学原理

根据维基百科的定义,在数学上一个包含n个变量的实值函数其水平集可以表示为下面的公式:
L c ( f ) = ( x 1 , x 2 , . . . , x n ) ∣ f ( x 1 , x 2 , . . . , x n ) = c L c ( f ) = ( x 1 , x 2 , . . . , x n ) ∣ f ( x 1 , x 2 , . . . , x n ) = c L c ​ ( f ) = ( x 1 ​ , x 2 ​ , . . . , x n ​ ) ∣ f ( x 1 ​ , x 2 ​ , . . . , x n ​ ) = c Lc(f)=(x1,x2,...,xn)∣f(x1,x2,...,xn)=cL_c(f) = {(x_1,x_2,...,x_n)|f(x_1,x_2,...,x_n) = c}Lc​(f)=(x1​,x2​,...,xn​)∣f(x1​,x2​,...,xn​)=c Lc(f)=(x1,x2,...,xn)f(x1,x2,...,xn)=cLc(f)=(x1,x2,...,xn)f(x1,x2,...,xn)=cLc(f)=(x1,x2,...,xn)f(x1,x2,...,xn)=c
可以看出,水平集指的是这个函数的取值为一个给定的常数c.那么当变量个数为2时,这个函数的水平集就变味了一条曲线,也可以成为等高线。这时函数f就可以描述一个曲面。(同样,三个变量时就能得到一个等值面,大于3的就是水平超面了)
下面来看一个简单的曲面的水平集(等值线的例子):

上图中,左边是Himmelblau方程所描述的曲面即 z = f ( x , y ) z = f ( x , y ) z = f ( x , y ) z=f(x,y)z=f(x,y)z=f(x,y) z=f(x,y)z=f(x,y)z=f(x,y),右边就是这个曲面的等高线集合,其中每一条就对应着一个常数c的水平集。

2.水平集方法

在计算机视觉中,利用水平集方法的优势在于,可以利用这种方法在固定的坐标系中,计算曲线、曲面的演化,而无需知道曲线曲面的参数,所以这种方法又称为几何法。
具体来讲,在图像分割任务中如果要得到每个物体准确的包络曲线,就需要对去描述这个曲线在xy坐标系下的演化。最初曲线在二维图像平面上是这样的:
y = g ( x ) y = g ( x ) y = g ( x ) y=g(x)y=g(x)y=g(x) y=g(x)y=g(x)y=g(x)
图割过程就是要找出一条比较好的曲面来包围物体。
但是这个函数求解和计算比较困难,那么就可以用水平集的思想和方法来解决:

1.首先将这个曲线看成是某个三维曲面下的某一条等高线:
z = f ( x , y ) z = f ( x , y ) z = f ( x , y ) z=f(x,y)z = f(x,y)z=f(x,y) z=f(x,y)z=f(x,y)z=f(x,y)
f ( x , y ) f ( x , y ) f ( x , y ) f(x,y)f(x,y)f(x,y) f(x,y)f(x,y)f(x,y)就可以看做是一个xy的隐函数方程。

2.特别的,在二维图像领域一般将上面讲到的函数 z = f ( x , y ) z = f ( x , y ) z = f ( x , y ) z=f(x,y)z=f(x,y)z=f(x,y) z=f(x,y)z=f(x,y)z=f(x,y)设置为0,刚刚所说的曲面的零水平集就是图像上的边缘包络
z = f ( x , y ) = 0 z = f ( x , y ) = 0 z = f ( x , y ) = 0 z=f(x,y)=0z=f(x,y)=0z=f(x,y)=0 z=f(x,y)=0z=f(x,y)=0z=f(x,y)=0
或者更为标准的形式如下:
Γ = ( x , y ) ∣ z ( x , y ) = 0 Γ = ( x , y ) ∣ z ( x , y ) = 0 Γ = ( x , y ) ∣ z ( x , y ) = 0 Γ=(x,y)∣z(x,y)=0\Gamma = {(x,y)| z(x,y)=0}Γ=(x,y)∣z(x,y)=0 Γ=(x,y)z(x,y)=0Γ=(x,y)z(x,y)=0Γ=(x,y)z(x,y)=0
这时,z(x,y)=f(x,y)就是辅助函数,用三维的曲面来辅助表示二维的曲线。
在这里插入图片描述
这里还有一个假设, Γ Γ Γ Γ\GammaΓ ΓΓΓ零水平集内部的(包络内的)为正外面为负。

这里有个重要的性质,基于高维曲面水平集方法得到的这个零水平集曲线是封闭的、连续的、处处可导的,这就为后面的图像分割提供了基础。

3.零水平集演化

为了获得与图像边缘相适应的结果,z需要进行演化才能使得其0水平集所描述的曲线很好的包裹住需要分割的物体,那么此时就涉及到方程的演化:
Γ ( t ) = ( x , y ) ∣ z ( x , y ) = 0 Γ ( t ) = ( x , y ) ∣ z ( x , y ) = 0 Γ ( t ) = ( x , y ) ∣ z ( x , y ) = 0 Γ(t)=(x,y)∣z(x,y)=0\Gamma(t) = {(x,y)| z(x,y)=0}Γ(t)=(x,y)∣z(x,y)=0 Γ(t)=(x,y)z(x,y)=0Γ(t)=(x,y)z(x,y)=0Γ(t)=(x,y)z(x,y)=0
∂ z ∂ t = v ∣ Δ z ∣ ∂ z ∂ t = v ∣ Δ z ∣ ∂ t ∂ z ​ = v ∣ Δ z ∣ ∂z∂t=v∣Δz∣\dfrac{\partial z}{\partial t} = v |\Delta z|∂t∂z​=v∣Δz∣ zt=vΔztz=vΔztz=vΔz
这里是一个曲面演化后,其零水平集演化的过程:
在这里插入图片描述
要促使边缘演化成包络object的形式,需要一个所谓的图像力来促使其变化,这时候就需要利用图像中的梯度来作为这个图像力的组成部分驱动曲线去靠近边缘。下图是一个例子,作图是原图,右图是梯度图。
在这里插入图片描述
<font color=dodgerblue<那么这个图像力就需要在原理边缘的时候大,靠近边缘的时候缩小,直到贴合边缘。
在这里插入图片描述
在梯度的驱动下,其演化过程如上图所示。

4.如何求解最小值

上面的问题在数学中可以归结为能量泛函问题,求解边缘的过程就是这个水平集能量泛函最小化的过程。
著名的方法来自于下面这篇文章:
Level Set Evolution Without Re-initialization: A New Variational Formulation
作者(李明纯)通过引入了内部能量项来惩罚由信号距离函数造成的水平集函数的偏差,以及外部能量项来驱动零水平集向期望的图像特征运动,实现了很好的分割效果。
在这里插入图片描述

5.Demo

下图是matlab 中,稍作修改运行作者给出的工具函数demo:
原图和分割效果图:
在这里插入图片描述在这里插入图片描述


pics contenx ref from:
https://profs.etsmtl.ca/hlombaert/algorithms.php
https://math.berkeley.edu/~sethian/2006/Explanations/level_set_explain.html
https://www.zhihu.com/question/22608763
https://blog.csdn.net/github_35768306/article/details/64129197
https://blog.csdn.net/songzitea/article/details/46385271
李明纯:http://www.engr.uconn.edu/~cmli/
paper:http://www.imagecomputing.org/~cmli/paper/levelset_cvpr05.pdf
matlab:https://www.mathworks.com/matlabcentral/profile/authors/870631-chunming-li
https://blog.csdn.net/yutianxin123/article/details/69802364
cells: https://www.histology.leeds.ac.uk/blood/blood_wbc.php


http://chatgpt.dhexx.cn/article/a8lO9K1b.shtml

相关文章

图像分割 - 水平集算法

水平集介绍 水平集分为三种&#xff1a; 1 . 基于图像边缘灰度梯度信息 &#xff0c;适用于边缘强的图像分割 2 . 基于区域特征 &#xff0c;利用区域信息引导曲线慢慢靠近 &#xff0c;比如分割曲线区域的内外灰度均值&#xff0c;分割曲线内部区域面积&#xff08;例如 Ch…

IBGP水平分割

IBGP水平分割规则 IBGP水平分割用于在IBGP对等体之间进行路由传递时&#xff0c;无法像EBGP对等体那样一来AS-Path属性进行防止环路的问题&#xff0c;因为AS-Path属性在AS内进行传递时是不会发生改变的。 下图便是极有可能出现IBGP对等体环路的场景&#xff1a; R1将10.1.1.…

垂直分割和水平分割

2019独角兽企业重金招聘Python工程师标准>>> 1&#xff0c;水平分割&#xff1a; 例&#xff1a;QQ的登录表。假设QQ的用户有100亿&#xff0c;如果只有一张表&#xff0c;每个用户登录的时候数据库都要从这100亿中查找&#xff0c;会很慢很慢。如果将这一张表分成1…

RIP的水平分割及触发更新(超详细,小白基础实验)

RIP的水平分割及触发更新 希望有需要的小伙伴可以参考参考&#xff0c;写的不好&#xff0c;请多包涵&#xff01; 基本概念&#xff1a; 1&#xff1a;水平分割&#xff08;Split Horizon&#xff09;指的是RIP从某个接口接收到的路由信息&#xff0c;不会从该接口再发给邻居…

分库分表的垂直分割与水平分割

1、垂直分库 根据业务耦合性&#xff0c;将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似&#xff0c;按业务分类进行独立划分。与“微服务治理”的做法相似&#xff0c;每个微服务使用单独的一个系统。如图&#xff1a; 2、垂直分表 基于数据表中的…

一起聊聊 dB、dB、dBm、dBi 吧!

点击上方“小麦大叔”&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”……有时候&#xff0c;这些长得很像的dBx们可能被…

单位意义:dB、dBm与dBw、dBμ与dBV、dBi与dBd、dBFS

dB单位概念一直是以前比较模糊的地方&#xff0c;机缘下&#xff0c;就整体的把一些相关的dB单位的文献统一看了一些&#xff0c;下面就简单的解释一下这些基本单位的意义和基本换算。 dB 简单解释下dB产生的由来&#xff0c;dB是decibel的缩写,意即十分之一贝尔(bel)&#xf…

分贝dB、dBm、dBw

文章目录 【1. 物理意义】1.1 功率增益1.2 幅值增益 【2. 3dB】【3. dBm、dBw】 【1. 物理意义】 分贝&#xff08;decibel&#xff0c;/dɛsɪ.bɛl/&#xff09;是量度两个相同单位之数量比例的计量单位&#xff0c;常用dB表示。 1.1 功率增益 A ( P ) ( d B ) 10 l g ( P…

一分钟读懂dB、dBm、dBw的区别

dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”…… 有时&#xff0c;这些长得很像的dBx们可能被弄混&#xff0c;甚至造成计算失误。它们究竟有什么区别呢&#xff1f; 这事不得不先从dB说起。…

EMC常见术语-dB、dBm、dBw以及如何计算

1. 手把手教&#xff1a;如何计算dB、dBm、dBw…… dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”…… 有时&#xff0c;这些长得很像的dBx们可能被弄混&#xff0c;甚至造成计算失误。它们究…

dB dBm dBW 的关系与换算

前言 这些都叫“分贝数”&#xff0c;表示“相对”的思想。 “dB” 字段可看作 “相对于”&#xff1a; dBdBm (dBmW)&#xff1a;相对于 1 mW 是多少dBW&#xff1a;相对于 1 W 是多少 文中采用方括号 [ ] 表示采用基本功率定义的分贝数 一、定义 1. dB 定义&#xff1a…

dBm和dB(纯计数单位)

分贝毫瓦&#xff08;dBm&#xff09; 分贝毫瓦(dBm&#xff0c;全写为“decibel relative to one milliwatt”)为一个指代功率的绝对值&#xff0c;而不同于dB只是一个相对值。 任意功率P(mW)与xdBm换算的公式如下&#xff1a; 以及 例如&#xff0c;1毫瓦(1 mW)换算成分贝毫…

DDL语言(添加、修改、删除)

数据库意义&#xff1a;数据存储&#xff0c;数据管理 DML语言&#xff1a;数据操作语言&#xff08;insert、update、delete&#xff09; 添加&#xff08;insert&#xff09; 语法&#xff1a; insert into 表名(字段1,字段2,字段3,...) values(值1),(值2),(值3),(...) 例&a…

使用数据库DDL语言创建数据库和基本表?(SQL Server 2014)

摘要&#xff1a;微信搜索【三桥君】 检索&#xff1a;《数据库系统原理》课程实验报告——实验一 建立数据库和基本表结构 说明&#xff1a;本实验是在SQL Server 2014版本数据库下操作完成的。 本实验通过举例创建一个数据库、一张有定义的表、以及添加数据到该表的实验过程&…

实验1 SQL的DDL语言和单表查询

第1关&#xff1a;创建供应商表S(SNO,SNAME,STATUS,CITY) 任务描述 创建供应商表S(SNO,SNAME,STATUS,CITY) 相关知识 供应商表S由供应商代码&#xff08;SNO&#xff09;、供应商姓名&#xff08;SNAME&#xff09;、供应商状态&#xff08;STATUS&#xff09;、供应商所在城市…

DML语言和DDL语言(数据库)

数据库DML,DDL语言&#xff1a;使用平台&#xff0c; DDL语言 1.create table 2.Create index 3.Alter table 4.Alter index 5.Drop index 1.展示数据库 2.使用某个数据库 3.展示表 4.查询表&#xff08;首先你要确定&#xff0c;你这个数据库有表&#xff09; 5.创建数…

mysql数据库-DDL语言

目录 1.DDL是什么&#xff1f; 2.有哪些常用的操作 1.查看数据库 2.创建数据库 2.删除数据库 3.添加查看表 4.删除表 5.修改表 &#xff08;1&#xff09;修改表类型 (2)增加表字段 &#xff08;3&#xff09;删除表字段 &#xff08;4&#xff09;修改字段名 &#x…

SQL语句之DDL语言

说明&#xff1a;DDL&#xff08;Data Definition Language&#xff0c;数据定义语言&#xff09;&#xff0c;用来定义数据库对象(数据库、表)&#xff0c;包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库&#xff0c;默认有以下四个数据库&…

DDL语言

其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表&#xff08;CREATE TABLE 或 DROP TABLE&#xff09;&#xff1b;为表加入索引等。 mysql是一个关系型数据库&#xff0c;库里面包含若干个表&#xff0c;而每一张表都是由行和列组成。 打开Navicat 1.0…

数据库:DML语言和DDL语言

文章目录 一、DML语言(数据操作语言)1.插入语句(1)方式一(2)方式二(3)两种方式比较 2.修改语句(1)修改单表的记录(2)修改多表的记录&#xff08;补充&#xff09; 3.删除语句(1)方式一(2)方式二(3)方式一与方式二区别(⭐) 二、DDL语言1.库的管理2.表的管理(1)表的创建A.语法B.常…