
是这样的,如果你再程序开始添加holdon这个的画,表示这之后的每一次作图都保留以前的图,这样就可以连续画图了
反之holdoff,表示打开这个之后,每次画图,删除以前的图,
X=0; %清空X
map=0;
[X,map]=imread('lena256x256x8bmp'); %读取图像
p=imfinfo('lena256x256x8bmp'); %读取图像的属性
s=2^pBitDepth-1; %计算图像的最大深度,如8位图像为255
%-------------------------------------------------------------------------
%简化的图像增强算法:简化Pmn及T变换的算法为:
Y=0; %清空Y
A=0;%清空A
Y=double(X)/s; %计算P(m,n),相当于求G(x)
%模糊变换算法
for m=1:pHeight
for n=1:pWidth
if(Y(m,n)<05)
A(m,n)=2Y(m,n)^2;
else
A(m,n)=1-2(1-Y(m,n))^2;
end
end
end
B=0; %清空B
B=uint8(A(2^pBitDepth-1)); %相当于求逆G-1(x')
%%%区域减影增强算法
P=0; %清空P
d=000005;%%%%设定冗余度
k=2;%%%%设定修正参数
for m=1:pHeight
for n=1:pWidth
if(Y(m,n)-A(m,n)>d)
P(m,n)=Y(m,n)+k(Y(m,n)-A(m,n));
end
if(Y(m,n)-A(m,n)<(-d))
P(m,n)=Y(m,n)+(-k)(Y(m,n)-A(m,n));
else
P(m,n)=Y(m,n);
end
end
end
B=0; %清空B
B=uint8(P(2^pBitDepth-1)); %相当于求逆G-1(x')
%%%图像增强几种方法效果对比
I=imread('lena256x256x8bmp'); %读入图像
I=double(I); %变成双精度
K1=filter2(fspecial('average',5),I)/255; %进行滤波
K2=imsubtract(I,K1);
K2=immultiply(K2,05);
K3=imadd(I,K2);
K2=uint8(K2); %转成8位数据
K3=uint8(K3);
I=uint8(I);
figure
title('图像增强几种方法效果对比');
subplot(2,2,1);imshow(I);title('原始图像');
subplot(2,2,2);imshow(K1);title('低通滤波图像');
subplot(2,2,3);imshow(K3);title('线性反锐化掩膜图像');
subplot(2,2,4);imshow(B);title('区域减影增强图像');
从图像可知,这两条曲线分别是sin(x),cos(x)。实现这两条曲线的绘制可以这样编写其代码:
x=0:pi/10:4pi; %生成x向量组,其范围从0到4π,步长为pi/10
y1=sin(x); %计算正弦函数值
y2=cos(x); %计算余弦函数值
plot(x,y1,'--',x,y2,'-') %绘制正弦函数和余弦函数曲线图
legend("sin(x)","cos(x)"); %图例标注
xlabel('时间');ylabel('幅值'); %标注坐标轴名称
执行代码和运行结果
这段程序其实可以这样理解:
imglist是matlab中的元胞类型,其中每一个元素包含了matlab目录中的,列举了好几张,如第一张是flujet,第二张是spine,这些都有三个属性,X代表图像数据,map代表图像固有的格式,caption。
colorlabels定义了下面要用到的colormap模式,有default,hot,hsv等。
定义好了所需的及模式后,进入
load(imglist{4},'X','map');这句话的含义是加载进第四张名字为durer的,同时加载进的X属性和map值。imagesc是一个图像显示函数,将数据X用显示出来,紧接着colormap(map)指定显示的图像模式,此处map为图像固有的模式。最后再去掉坐标轴。
这就是整个程序的执行过程。
另外需要注意,
load(imglist{4},'X','map');
将4改为其他的1或者2等其他参数,显示的将是其他的,
将colormap(colorlabels{1})句子解注释,改变参数1为2或者3等其他值,图像将会呈现其它的风格。
整个程序需要理解几个重要的函数colormap,imagesc,load就可以了。
窗函数设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2fp/fs;
wc=2fc/fs;
N=ceil((as-795)/(1436(wc-wp)/2))+1;
beta=01102(as-87);
window=Kaiser(N+1,beta);
b=fir1(N,wc,window);
freqz(b,1,512,fs);
结果:
高通滤波器:
fs=22000;
Wp=25000/fs;
Ws=24800/fs;
Ap=1;
As=100;
N=ceil(8pi/(Wp-Ws))+1;
N=N+mod(N+1,2)+1;
Wc=(Wp+Ws)/2/pi;
h=fir1(N,Wc,'high');
omega=linspace(0,pi,512);
freqz(h,1,omega);
结果:
带通滤波器:
fs=22000;
Wp1=21200/fs;
Wp2=23000/fs;
Wc1=21000/fs;
Wc2=23200/fs;
Ap=1;
As=100;
W1=(Wp1+Wc1)/2;
W2=(Wp2+Wc2)/2;
wdth=min((Wp1-Wc1),(Wc2-Wp2));
N=ceil(11pi/wdth)+1;
b = fir1(N,[W1 W2]);
freqz(b,1,512,fs)
结果:
双线性法设计低通滤波器:
fp=1000;
fc=1200;
as=100;
ap=1;
fs=22000;
wp=2fp/fs;
wc=2fc/fs; %归一化截止频率
[n,wn]=ellipord(wp,wc,ap,as);%求数字滤波器的最小阶数和归一化截止频率
[b,a]=ellip(n,ap,as,wn);%求传递函数的分子分母系数
freqz(b,a,512,fs);
结果:
滤波:
d=filter(b,a,y);
确定物体个数和中心的话,利用颜色值进行连通性分析,应该能确定一块相同颜色的区域,找到这块区域就能确定质心点了。要是还要判断形状还得先提取出每个形状的特征。
1识别静态的整个人体较难;即使识别出来结果也不可靠,所以现在主要以手势/人脸识别为主;这是因为手和脸上面有比较独特的特征点。你说的滤波归根结底还是要找出具有灰度跳变的高频部分作为人体;这除非背景中除了人以外没有其他突出的物体;否则光凭滤波二值法检测人体是不太现实。
2 两张中人要是产生相对运动,检测起来就容易多了;利用帧间差分找到图像中灰度相差大的部分(你用的滤波也是一种手段);然后二值化区域连通;要是图像中没有其他移动物体计算连通区域的变动方向就是人的运动方向。
先建立起静态背景的模型(或者直接在没人的时候拍张);然后不断的与这个背景做差,原理和帧间差分一样。建议你先从典型的帧间差分例程开始下手(比如移动车辆的检测,这个比较多)。
在二值化之后加上一个区域连通的步骤;即使用膨胀或者闭运算;这样轮廓就是连续的了;用matlab的话bwlabel可以统计连通区域里面像素的个数也就是人体面积大小。质心就是横竖坐标的平均值;取所有人体点的横竖坐标分别累加;除以坐标总数得到的x和y平均值;这个就是质心了。
这段程序主要进行图像处理。
首先转化为灰度图像,画出灰度值分布的直方图。
之后利用sobel算子提取边缘。
之后进行图像腐蚀运算,腐蚀过程中用到的是1;1;1结构,这个结构会腐蚀掉竖着的一些内容不会腐蚀横着的内容。
例如,一个33的矩阵
1,1,1
1,1,1
1,1,1
经过这个算子复试后就会变成
0,0,0
1,1,1
0,0,0
这就保护了被处理图像水平方向的信息。
之后利用矩形5050 进行连接。
最后一个函数bwareaopen是将那些不闭合的区域删掉。
比如字母i,t之类不闭合就会被删掉
o,a闭合就会被保留。
最后就会生成比较完整的边界信息。
以上就是关于matlab程序画图全部的内容,包括:matlab程序画图、求救!帮忙看一段MATLAB图像处理的程序、用matlab实现这个绘图,程序是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)