matlab icol,Matlab 图像处理相关函数命令大全
Matlab 图像处理相关函数命令大全
一、通用函数:
colorbar 显示彩色条
语法:colorbar \ colorbar('vert') \
colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \
colorbar(...,'peer',axes_handle)
getimage 从坐标轴取得图像数据
语法:A=getimage(h) \ [x,y,A]=getimage(h) \
[...,A,flag]=getimage(h) \ [...]=getimage
imshow 显示图像
语法:imshow(I,n) \ imshow(I,[low high]) \
imshow(BW) \ imshow(X,map) \ imshow(RGB)\
imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \
h=imshow(...)
montage 在矩形框中同时显示多幅图像
语法:montage(I) \ montage(BW) \ montage(X,map)
\ montage(RGB) \ h=montage(...)
immovie 创建多帧索引图的电影动画
语法:mov=immovie(X,map) \
mov=immovie(RGB)
subimage 在一副图中显示多个图像
语法:subimage(X,map) \ subimage(I) \
subimage(BW) \ subimage(RGB) \ subimage(x,y,...)
\ subimage(...)
truesize 调整图像显示尺寸
语法:truesize(fig,[mrows mcols]) \
truesize(fig)
warp 将图像显示到纹理映射表面
语法:warp(X,map) \ warp(I ,n) \ warp(z,...)
warp(x,y,z,...) \ h=warp(...)
zoom 缩放图像
语法:zoom on \ zoom off \ zoom out \ zoom reset
\ zoom \ zoom xon \ zoom yon\ zoom(factor) \
zoom(fig,option)
二、图像文件I/O函数命令
imfinfo 返回图形图像文件信息
语法:info=imfinfo(filename,fmt) \
info=imfinfo(filename)
imread 从图像文件中读取(载入)图像
语法:A=imread(filename,fmt) \
[X,map]=imread(filename,fmt) \ [...]=imread(filename) \
[...]=imread(URL,...) \ [...]=imread(...,idx) (CUR,ICO,and TIFF
only) \ [...]=imread(...,'frames',idx) (GIF only) \
[...]=imread(...,ref) (HDF only) \
[...]=imread(...,'BackgroundColor',BG) (PNG only) \ [A,map,alpha]
=imread(...) (ICO,CUR,PNG only)
imwrite 把图像写入(保存)图像文件中
语法:imwrite(A,filename,fmt) \
imwrite(X,map,filename,fmt) \ imwrite(...,filename) \
imwite(...,Param1,Val1,Param2,Val2...)
imcrop 剪切图像
语法:I2=imcrop(I) \ X2=imcrop(X,map) \
RGB2=imcrop(RGB) \ I2=imcrop(I,rect) \ X2=imcrop(RGB,rect) \
[...]=imcrop(x,y,...) \ [A,rect]=imcrop(...) \
[x,y,A,rect]=imcrop(...)
imresize 改变图像大小
语法:B=imresize(A,m,method)
imrotate 旋转图像
语法:B=imrotate(A,angle,method) \
B=imrotate(A,angle,method,'crop')
三、像素和统计处理函数
corr2 计算两个矩形的二维相关系数
语法:r=corr2(A,B)
imcontour 创建图像数据的轮廓图
语法:imcontour(I,n) \ imcontour(I,v) \
imcontour(x,y,...) \ imcontour(...,LineSpec) \ [C,h]
=imcontour(...)
imfeature 计算图像区域的特征尺寸
语法:stats=imfeature(L,measurements) \
stats=imfeature(L,measurements,n)
imbist 显示图像数据的柱状图
impixel 确定像素颜色值
语法:P=impixel(I) \ P=impixel(X,map) \
P=impixel(RGB) \ P=impixel(I,c,r) \ P=impixel(X,map,c,r) \
P=impixel(RGB,c,r) \ [c,r,P]=impixel(...) \ P=impixel(x,y,I,xi,yi)
\ P=impixel(x,y,RGB,xi,yi) \ P=impixel(x,y,X,map,xi,yi)
\
[xi,yi,P]=impixel(x,y,...)
improfile 沿线段计算剖面图的像素值
语法:c=improfile \ c=improfile(n) \
c=improfile(I,xi,yi) \ c=improfile(I,xi,yi,n) \ [cx,cy,c]=improfile(...) \
[cx,cy,c,xi,yi]=improfile(...) \ [...]=improfile(x,y,I,xi,yi)
\ [...]=improfile(x,y,I,xi,yi,n) \
[...]=improfile(...,method)
mean2 计算矩阵元素的平均值
语法:B=mean2(A)
pixval 显示图像像素信息
语法:pixval on
std2 计算矩阵元素的标准偏移
语法:b=std2(A)
四、图像分析函数:
edge 图像边缘检测
语法:BW=edge(I,'sobel') \
BW=edge(I,'sobel',thresh) \ BW=edge(I,'sobel',thresh,direction) \
[BW,thresh]=edge(I,'sobel',...) \ BW=edge(I,'prewitt') \
BW=edge(I,'prewitt',thresh) \ BW=edge(I,'prewitt',thresh,direction)
\
[BW,thresh]=edge(I,'prewitt',...)
\ BW=edge(I,'roberts') \
BW=edge(I,'roberts',thresh) \ [BW,thresh]=edge(I,'roberts',...) \ BW=edge(I,'log') \
BW=edge(I,'log',thresh) \ BW=edge(I,'log',thresh,sigma) \
[BW,threshold]=edge(I,'log',...) \ BW=edge(I,'zerocross',thresh,h)
\ [BW,thresh]=edge(I,'zerocross',...) \
BW=edge(I,'canny') \
BW=edge(I,'canny',thresh) \ BW=edge(I,'canny',thresh,sigma) \
[BW,threshold]=edge(I,'canny',...)
qtgetblk 获取四叉树分解的块值
语法:[vals,r,c]=qtgetblk(I,S,dim) \
[vals,idx]=qtgetblk(I,S,dim)
qtsetblk 设置四叉树分解中的块值
语法:J=qtsetblk(I,S,dim,vals)
五、图像增强函数
histeq 用柱状图均等化增强对比
语法:J=histeq(I,hgram) \ J=histeq(I,n) \
[J,T]=histeq(I,...) \ newmap=histeq(X,map,hgram) \
newmap=histeq(X,map)
imadjust 调整图像灰度值或颜色映像表
语法:J=imadjust(I,[low_in ,high_in]),[low_out
,high_out],gamma) \ newmap=imadjust(map,[low_in ,high_in]),[low_out
,high_out],gamma) \ RGB2=imadjust(RGB1,...)
imnoise 增强图像的渲染效果
语法:J=imnoise(I,type) \
J=imnoise(I,type,parameters)
medfilt2 进行二维中值过滤
语法:B=medfilt2(A,[m n]) \ B=medfilt2(A) \
B=medfilt2(A,'indexed',...)
ordfilt2 进行二维统计顺序过滤
语法:B=ordfilt2(A,order,domain) \
B=ordfilt2(A,order,domain,S) \ B=ordfilt2(...,padopt)
wiener2 进行二维适应性去噪过滤处理
语法:J=wiener2(I,[m n],noise)
\ [J,noise]=wiener2(I,[m n])
六、线性滤波函数
conv2 进行二维卷积操作
语法:C=conv2(A,B) \ C=conv2(hcol,hrow,A) \
C=conv2(...,'shape')
convmtx2 计算二维卷积矩阵
语法:T=convmtx2(H,m,n) \ T=convmtx2(H,[m
n])
convn 计算n维卷积
语法:C=convn(A,B) \
C=convn(A,B,'shape')
filter2 进行二维线性过滤操作
语法:Y=filter2(h,X) \
Y=filter2(h,X,shape)
fspecial 创建预定义过滤器
语法:h=fspecial(type) \
h=fspecial(type,parameters)
七、线性二维滤波设计函数
freqspace 确定二维频率响应的频率空间
语法:[f1,f2]=freqspace(n) \
[f1,f2]=freqspace([m n]) \ [x1 ,y1]=freqspace(...,'meshgrid') \
f=freqspace(N) \ f=freqspace(N,'whole')
freqz2 计算二维频率响应
语法:[H,f1,f2]=freqz2(h,n1,n2) \
[H,fi,f2]]=freqz2(h,[n2,n1]) \ [H,fi,f2]]=freqz2(h,f1,f2]) \
[H,fi,f2]]=freqz2(h) \ [...]=freqz2(h,...,[dx dy]) \ [...]=freqz2(h,...,dx) \
freqz2(...)
fsamp2 用频率采样法设计二维FIR过滤器
语法:h=fsamp2(Hd) \ h=fsamp2(f1,f2,Hd,[m
n])
ftrans2 通过频率转换设计二维FIR过滤器
语法:h=ftrans2(b,t) \ h=ftrans2(b)
fwind1 用一维窗口方法设计二维FIR过滤器
语法:h=fwind1(Hd,win) \ h=fwind1(Hd,win1,win2)
\ h=fwind1(f1,f2,Hd,...)
fwind2 用二维窗口方法设计二维FIR过滤器
语法:h=fwind2(Hd,win) \
h=fwind2(f1,f2,Hd,win)
八、图像变换函数
dct2 进行二维离散余弦变换(反余弦变换用idct2)
语法:B=dct2(A) \ B=dct2(A,m.n) \ B=dct2(A,[m
n])
dctmtx 计算离散余弦傅立叶变换
语法:D=dctmtx(n)
fft2 进行二维快速傅立叶变换(反变换用ifft2)
语法:Y=fft2(X) \ Y=fft2(X,m,n)
fftn 进行n维快速傅立叶变换(反变换用ifftn)
语法:Y=ffn(X) \ Y=fftn(X,siz)
fftshift 快速傅立叶变换的DC组件移到光谱中心
语法:Y=fftshift(X) \
Y=fftshift(X,dim)
iradon 进行反radon变换
语法:I=iradon(P,theta) \
I=iradon(P,theta,interp,filter,d,n) \ [I,h]=iradon(...)
phantom 产生一个头部幻影图像
语法:P=phantom(def,n) \ P=phantom(E,n) \
[P,E]=phantom(...)
radon 计算radon变换
语法:R=radon(I,theta) \
[R,xp]=radon(...)
九、边沿和块处理函数
bestblk 确定进行块操作的块大小
语法:siz=bestblk([m n],k) \ [mb,nb]=bestblk([m
n],k)
blkproc 实现图像的显示块操作
语法:B=blkproc(A,[m n]),fun) \ B=blkproc(A,[m
n],fun,P1,P2,...) \ B=blkproc(A,[m n],[mborder
nborder],fun,...)
col2im 将矩阵的列重新组织到块中
语法:A=col2im(B,[m n],[mm nn],block_type) \
A=col2im(B,[m n],[mm nn])
colfilt 利用列相关函数进行边沿操作
语法:B=colfilt(A,[m n],block_type,fun) \
B=colfilt(A,[m n],block_type,fun,P1,P2,...) \ B=colfilt(A,[m
n],[mblock nblock],...) \ B=colfilt(A,'indexed',...)
im2col 重调图像块为列
语法:B=im2col(A,[m n],block_type) \
B=im2col(A,[m n]) \ B=im2col(A,'indexed',...)
nlfilter 进行边沿操作
语法:B=nlfilter(A,[m n],fun) \ B=nlfilter(A,[m
n],fun,P1,P2,...) \ B=nlfilter(A,'indexed',...)
十、二进制图像操作函数
applylut 在二进制图像中利用lookup表进行行边沿操作
语法:A=applylut(BW,LUT)
bwarea 计算二进制图像对象的面积
语法:total=bwarea(BW)
bweuler 计算二进制图像的欧拉数
语法:eul=bweuler(BW)
bwfill 填充二进制图像的背景色
语法:BW2=bwfill(BW1,c,r,n) \ BW2=bwfill(BW1,n)
\ [BW2,idx]=bwfill(...) \ BW2=bwfill(x,y,BW1,xi,yi,n) \
[x,y,BW2,idx,xi,yi]=bwfill(...) \ [BW2,idx]=bwfill(BW1,'holes',n)
bwlabel 标注二进制图像中已连接的部分
语法:L=bwlabel(BW,n) \
[L,num]=bwlabel(BW,n)
bwmorph 提取二进制图像的轮廓
语法:BW2=bwmorph(BW1,operation) \
BW2=bwmorph(BW1,operation,n)
bwperim 计算二进制图像中对象的周长
语法:BW2=bwperim(BW1) \
BW2=bwperim(BW1,CONN)
bwselect 在二进制图像中选择对象
语法:BW2=bwselect(BW1,c,r,n) \
BW2=bwselect(BW1,n) \ [BW2,idx]=bwselect(...) \
BW2=bwselect(x,y,BW1,xi,yi,n) \
[x,y,BW2,idx,xi,yi]=bwselect(...)
dilate 放大二进制图像
语法:BW2=dilate(BW1,SE) \
BW2=dilate(BW1,SE,alg) \ BW2=dilate(BW1,SE,...,n)
erode 弱化二进制图像的边界
语法:BW2=erode(BW1,SE) \ BW2=erode(BW1,SE,alg) \ BW2=erode(BW1,SE,...,n)
makelut 创建一个用于applylut函数的lookup表
语法:lut=makelut(fun,n) \
lut=makelut(fun,n,P1,P2,...)
十一、区域处理函数
roicolor 选择感兴趣的颜色区
语法:BW=roicolor(A,low,high) \
BW=rocicolor(A,v)
roifill 在图像的任意区域中进行平滑插补
语法:J=roifill(I,c,r) \ J=roifill(I) \
J=roifill(I,BW) \ [J,BW]=roifill(...) \ J=roifill(x,y,I,xi,yi) \
[x,y,J,BW,xi,yi]=roifill(...)
roifilt2 过滤敏感区域
语法:J=roifilt2(h,I,BW) \ J=roifilt2(I,BW,fun)
\ J=roifilt2(I,BW,fun,P1,P2,...)
roipoly 选择一个敏感的多边形区域
语法:BW=roipoly(I,c,r) \ BW=roipoly(I) \
BW=roipoly(x,y,I,xi,yi) \ [BW,xi,yi]=roipoly(...) \
[x,y,BW,xi,yi]=roipoly(...)
十二、颜色映像处理函数
brighten 增加或降低颜色映像表的亮度
语法:brighten(beta) \ brighten(h,beta) \
newmap=brighten(beta) \ newmap=brighten(cmap,beta)
cmpermute 调整颜色映像表中的颜色
语法:[Y,newmap]=cmpermute(X,map) \
[Y,newmap]=cmpermute(X,map,index)
cmunigue 查找颜色映像表中特定的颜色及相应的图像
语法:[Y,newmap]=cmunigue(X,map) \
[Y,newmap]=cmunigue(RGB) \ [Y,newmap]=cmunique(I)
imapprox 对索引图像进行近似处理
语法:[Y,newmap]=imapprox(X,map,n)
\ [Y,newmap]=imapprox(X,map,tol) \
Y=imapprox(X,map,newmap) \ [...]=imapprox(...,dither_option)
rgbplot 划分颜色映像表
语法:rgbplot(cmap)
十三、颜色空间转换函数
hsv2rgb
转换HSV值为RGB颜色空间:M=hsv2rgb(H)
ntsc2rgb
转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap) \
RGB=ntsc2rgb(YIQ)
rgb2hsv
转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)
rgb2ntsc
转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap) \
YIQ=rgb2ntsc(RGB)
rgb2ycbcr
转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap) \
YCBCR=rgb2ycbcr(RGB)
ycbcr2rgb
转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap) \
RGB=ycbcr2rgb(YCBCR)
十四、图像类型和类型转换函数
dither 通过抖动增加外观颜色分辨率转换图像
语法:X=dither(RGB,map) \
BW=dither(I)
gray2ind 转换灰度图像为索引图像
语法:[X,map]=gray2ind(I,n) \
[X,map]=gray2ind(BW,n)
grayslice 从灰度图像为索引图像
语法:X=grayslice(I,n) \
X=grayslice(I,v)
im2bw 转换图像为二进制图像
语法:BW=im2bw(I,level) \ BW=im2bw(X,map,level)
\ BW=im2bw(RGB,level)
im2double 转换图像矩阵为双精度型
语法:I2=im2double(I1) \ RGB2=im2double(RGB1) \
I=im2double(BW) \ X2=im2double(X1,'indexed')
double 转换数据为双精度型
语法:double(X)
unit8 、unit16转换数据为8位、16位无符号整型: i=unit8(x) \
i=unit16(x)
im2unit8 转换图像阵列为8位无符号整型
语法:I2=im2unit8(I1) \ RGB2=im2unit8(RGB1) \
I=im2unit8(BW) \ X2=im2unit8(X1,'indexed')
im2unit16 转换图像阵列为16位无符号整型
语法:I2=im2unit16(I1) \ RGB2=im2unit16(RGB1) \
I=im2unit16(BW) \ X2=im2unit16(X1,'indexed')
ind2gray 把检索图像转化为灰度图像
语法:I=ind2gray(X,map)
ind2rgb 转化索引图像为RGB真彩图像
语法:RGB=ind2rgb(X,map)
isbw 判断是否为二进制图像
语法:flag=isbw(A)
isgray 判断是否为灰度图像
语法:flag=isgray(A)
isind 判断是否为索引图像
语法:flag=isind(A)
isrgb 判断是否为RGB真彩色图像
语法:flag=isrgb(A)
mat2gray 转换矩阵为灰度图像
语法:I=mat2gray(A,[amin amax]) \
I=mat2gray(A)
rgb2gray 转换RGB图像或颜色映像表为灰度图像
语法:I=rgb2gray(RGB) \
newmap=rgb2gray(map)
rgb2ind 转换RGB图像为索引图像
语法:[X,map]=rgb2ind(RGB,tol) \
[X,map]=rgb2ind(RGB,n) \ X=rgb2ind(RGB,map) \
[...]=rgb2ind(...,dither_option)
十五、新增图像处理工具箱函数
adapthisteq 限制对比度直方图均衡化: J=adapthisteq(I) \
J=adapthisteq(I,param1,val1,param2,val2...)
applycform 用于颜色空间变换
out=applyform(I,C)
bwboundaries 描绘二进制图像边界
语法: B=bwboundaries(BW) \
B=bwboundaries(BW,CONN) \ B=bwboundaries(BW,CONN,options)
[BW,CONN,options] \ [BL]=bwboundaries(...) \
[BLNA]=bwboundaries()
bwtraceboundary 描述二进制图像中的物体
B=bwtraceboundary(BW,P,fstep) \
B=bwtraceboundary(BW,P,fstep,CONN) \
B=bwtraceboundary(...N,dir)
decorrstrech 对多通道图像进行去相关处理
语法:S=decorrstretch(I) \
S=decorrstretch(I,TOL)
dicomdict 获取或读取DICOM文件
语法:dicomdict('set',dictionary) \
dictionary=dicomdict('get')
getline 用鼠标选择ployline
语法:[x,y]=getline(fig) \ [x,y]=getline(ax) \
[x,y]=getline \ [x,y]=getline(...,'closed')
getpts 用鼠标选择像素点
语法:[x,y]=getpts(fig) \ [x,y]=getpts(ax) \
[x,y]=getpts
getrect 用鼠标选择矩阵
语法:rect=getrect(fig) \ rect=getrect(ax) \
rect=getrect(fig)
iccread 读取ICC剖面
语法:P=iccread(filename)
im2java2d 将图像转换为Java缓冲图像
语法:jimage=im2java2d(I) \
jimage=im2java2d(X,MAP)
imview 在图像与蓝旗中显示图像
语法:imview(I) \ imview(RGB)
\ imview(X,map) \imview(I,range) \ imview(filename) \
imview(....'InitialMagnification',initial_mag) \
h=imview(...) \ imview close
all
ippl 检查IPPL的存在
语法:TF=ippl \ [TF B]=ippl
iptdemos 显示图像处理工具箱中的索引图像
lab2double、lab2unit16、lab2unit8
将L*a*b数据分别转换为双精度、16位数据、8位数据
makecform 创造一个色彩转换结构
poly2mask 把多边形区域转换成mask区域
语法:BW=poly2mask(x,y,m,n)
unitlut 查找表中A像素值
语法:B=unitlut(A,LUT)
xyz2double、xyz2unit16
将颜色数据从XYZ转换到双精度、16进制。
语法:xyzd=xyz2double(XYZ) \
xyz16=xyz2unit16(xyz)
matlab icol,Matlab 图像处理相关函数命令大全相关推荐
- matlab水壶图形,[转载]Matlab 图像处理相关函数命令大全
Matlab 图像处理相关函数命令大全 一.通用函数: colorbar 显示彩色条 语法:colorbar colorbar('vert') colorbar('horiz') colorbar(h ...
- Matlab 图像处理相关函数命令大全
一.通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorba ...
- matlab image命令,Matlab 图像处理相关函数命令大全
一.通用函数: colorbar显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar( ...
- Matlab 图像处理相关函数命令
一.通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorba ...
- matlab icol,matlab图像处理函数
一.通用函数: colorbar显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar( ...
- matlab warp,matlab warpimg
使用Matlab将24位图转为8位图的方法_调查/报告_表格/模板_实用文档.使用 Matlab 将 24 位图转为 8 位图的方法 方法一: originalimg=imread('a.bmp'); ...
- matlab 按字母排序,matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版
matlab命令大全(按字母排序) 总汇详解最新发布完整珍藏版 abs 绝对值.模.字符的ASCII码值 acos 反余弦 acosh 反双曲余弦 acot 反余切 acoth 反双曲余切 acsc ...
- MATLAB命令大全和矩阵操作大全
一.矩阵的表示 在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在"[ ]"内: b.矩阵的同行元素之间用空格(或",")隔开: c.矩阵的行与行之间用& ...
- matlab图像处理常用函数大全
显示索引图像和灰度图像 >> [X,map]=imread('trees.tif'); >> gmap=rgb2gray(map); >> figure,imsho ...
最新文章
- HashMap的31连环炮,我倒在第5个上
- mysql多表统计查询示例
- Mysql的一些问题
- 对未来计算机的畅想初中英语,初中英语期中考试,作文停电一小时,在北京……在上海……在威海…….doc...
- Flutter 雷达扫描效果、Flutter旋转扫描
- php if多条件_PHP的数据类型
- UTF8,Unicode 的区别(zt)
- java找三个数最大_用Java程序找最大的数字(4)
- linux centos6.5下安装svn方法
- python fpga chips_FPGA实现USB2.0同步读数据传输且用chipscop抓取波形(3)
- 7.企业安全建设指南(金融行业安全架构与技术实践) --- 外包安全管理
- 【python】字符串转换整数 (atoi) - String
- Halcon标定系列(3):我个人总结的“眼在手外“和“眼在手上”的心得笔记
- p图软件pⅰc_pic修图软件下载-pic修图 安卓版v16.4.52-PC6安卓网
- 机器人视觉分拣设计流程
- Http响应Response详解
- ps如何批量处理图片
- 解决TIM版无法修改个人文件夹位置
- AB32实例应用(4.非常规经验及技巧)
- UE4之替换第三人称模板
热门文章
- Codeforces Round #198 (Div. 1) B,C 动态规划
- 关于ViewDidUnload
- 关于日历的一个超级存储过程
- mysql netcdf_Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2以后版本)
- oopc——3.封装
- 数据 3 分钟 | 多家数据库厂商联合发布《分布式数据库发展路径研究》报告、巨杉数据库公布 2021 春季发布会时间...
- 2020年11月国产数据库排行: PingCAP融资破记录,PolarDB登云巅,达梦南大壮心雄
- 国庆前的最后3场直播活动!!
- 有多少漏洞都会重来:从ElasticSearch到MongoDB和Redis
- 时过境迁:Oracle跨平台迁移之XTTS方案与实践