图像处理颜色,纹理,形状matlab程序

图像处理颜色,纹理,形状matlab程序,第1张

运行效果:

测试图像

颜色,文理形状特征比较后的结果,从最相似的往下排,第一个与测试图像最相似:

纹理特征提取程序:

function T =coocurrence(Image)

Color= imread(Image);

Gray=rgb2gray(Color);

[M,N] = size(Gray);

%为了减少计算量,对原始图像灰度级压缩,将Gray量化成16级

for i = 1:M

  for j = 1:N

      for n = 1:256/16

          if (n-1)16<=Gray(i,j)&Gray(i,j)<=(n-1)16+15

              Gray(i,j) = n-1;

          end

      end

  end

end

%计算四个共生矩阵P,取距离为1,角度分别为0,45,90,135

P = zeros(16,16,4);

for m = 1:16

  for n = 1:16

      for i = 1:M

          for j = 1:N

              if j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1

                  P(m,n,1) = P(m,n,1)+1;

                  P(n,m,1) = P(m,n,1);

              end

              if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1

                  P(m,n,2) = P(m,n,2)+1;

                  P(n,m,2) = P(m,n,2);

              end

              if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1

                  P(m,n,3) = P(m,n,3)+1;

                  P(n,m,3) = P(m,n,3);

              end

              if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1

                  P(m,n,4) = P(m,n,4)+1;

                  P(n,m,4) = P(m,n,4);

              end

          end

      end

      if m==n

          P(m,n,:) = P(m,n,:)2;

      end

  end

end

% 对共生矩阵归一化

for n = 1:4

  P(:,:,n) = P(:,:,n)/sum(sum(P(:,:,n)));

end

%对共生矩阵计算能量、熵、惯性矩、相关性4个纹理参数

H = zeros(1,4);

I = H;

Ux = H;      Uy = H;

deltaX= H;  deltaY = H;

C =H;

for n = 1:4

  E(n) = sum(sum(P(:,:,n)^2)); %%能量

  for i = 1:16

      for j = 1:16

          if P(i,j,n)~=0

              H(n) = -P(i,j,n)log(P(i,j,n))+H(n); %%熵

          end

          I(n) = (i-j)^2P(i,j,n)+I(n);  %%惯性矩

       

          Ux(n) = iP(i,j,n)+Ux(n); %相关性中μx

          Uy(n) = jP(i,j,n)+Uy(n); %相关性中μy

      end

  end

end

for n = 1:4

  for i = 1:16

      for j = 1:16

          deltaX(n) = (i-Ux(n))^2P(i,j,n)+deltaX(n); %相关性中σx

          deltaY(n) = (j-Uy(n))^2P(i,j,n)+deltaY(n); %相关性中σy

          C(n) = ijP(i,j,n)+C(n);          

      end

  end

  C(n) = (C(n)-Ux(n)Uy(n))/deltaX(n)/deltaY(n); %相关性

end

%求能量、熵、惯性矩、相关性的均值和标准差作为最终8维纹理特征

a1 = mean(E) ;

b1 = sqrt(cov(E));

a2 = mean(H) ;

b2 = sqrt(cov(H));

a3 = mean(I);

b3 = sqrt(cov(I));

a4 = mean(C);

b4 = sqrt(cov(C));

T=[a1,a2,a3,a4,b1,b2,b3,b4];

T=T/sum(T);

图像匹配检索程序:

function [Sorted, ISorted,nResults,files]=searchImage(imageName, modelName)

% 找到最相近的图像

[Sorted, ISorted] = sort(Similarity);

Sorted=Sorted/sum(Sorted);

switch similaritymesure>Sorted(Nfiles)

  case 1

      nResults=Nfiles;

      msgbox(['调节相似度过大,请重新定值,最大值为' num2str(Sorted(Nfiles))]);

   

  case 0

for i=1:Nfiles

 if Sorted(i)>=similaritymesure

      nResults=i;

      break;

  end

end

end

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('区域减影增强图像');

窗函数设计低通滤波器:

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);

B=imresize(A,scale)\x0d\B=imresize(A,[mrowsncols])\x0d\\x0d\B就是图像A的拉伸或压缩结果\x0d\如果第二个输入参数是1个标量值scale,图像将保持纵横比\x0d\那么当0<scale1,B是A的放大结果\x0d\\x0d\如果第二个输入参量是一个想二元向量\x0d\那么说出的B的像素大小由[mrowsncols]决定,图像不一定保持纵横比

close all;clear;clc;

%读取并显示原图

image_rgb=imread('woman1jpg');

image_ycbcr=rgb2ycbcr(image_rgb); %将RGB色彩值变换为YcbCr色彩空间(将RGB真彩色图像转化为YcbCr色彩空间中相等的图像)

y=image_ycbcr(:,:,1); %这三行分别是Ycbcr空间的y,cb,cr对应矩阵

cr=image_ycbcr(:,:,2);

cb=image_ycbcr(:,:,3);

[W,H]=size(y); % y对应矩阵大小

image_face=zeros(W,H); %创建和原图等大的矩阵用来存放接下来二值化人脸数据

%以下循环是根据设定的阈值把人脸转换成二值图像

for x1=1:W; %%%%%%%%(cb=( 100,140),cr=(70,160)这是阈值,这个阈值应该是人脸肤色的范围

for y1=1:H;

if (cb(x1,y1)>=70)&&(cb(x1,y1)<=140)&&(cr(x1,y1)>=80)&&(cr(x1,y1)<=170)

image_face(x1,y1)=0;

else

image_face(x1,y1)=255;

end

end

end

figure(1),imshow(image_face) %显示初步转换成二值图像的人脸

%%%%%%%%% 找到人脸区域并设为白色%%%% (r=35)

se1=strel('square',35); %这个函数可以创建边长35的方形元素

fo=imclose(image_face,se1); %利用上面创建的方形元素,弥补figure(1)中人脸中以及其他部分残留的小块黑色

figure(2),imshow(fo) %显示修补漏洞后的人脸

log=logical(fo); %生成一个逻辑索引矩阵,为非零元素时返回1,否则返回0。用于把figure(2)中黑色部分记录为0,这样对非人脸部分做修改也不会影响人脸

r=image_rgb(:,:,1); %这个是rgb空间三维的数据

g=image_rgb(:,:,2);

b=image_rgb(:,:,3);

r(log==0)=255; %根据前面的逻辑数据把之前的黑色部分对应位置设为255,以后显示RGB图时,非人脸部分就是白色啦

g(log==0)=255;

b(log==0)=255;

face_rgb=cat(3,r,g,b); %把修改后的RGB矩阵重组

figure(3),imshow(face_rgb),title('face_rgb'); % 显示非人脸部分已经转白的RGB图

afm = rgb2gray(face_rgb); % rgb图转灰度图

figure(4), imshow(afm), title('surface image') % 显示人脸灰度图

这个是我个人加的注释 不知道你能不能理解 不能理解可以追问 我们一起学习下 哈哈 我也是新手

I=imread('D:\我的文档\MATLAB\cameramanbmp');

J0=imnoise(I,'gaussian');

J1=imnoise(I,'salt & pepper');

J0J3=imfilter(J0,fspecial('average'));

J0J5=imfilter(J0,fspecial('average',[5 5]));

J0Z3=medfilt2(J0);

J0Z5=medfilt2(J0,[5 5]);

J1J3=imfilter(J1,fspecial('average'));

J1J5=imfilter(J1,fspecial('average',[5 5]));

J1Z3=medfilt2(J1);

J1Z5=medfilt2(J1,[5 5]);

subplot(2,2,1),imshow(I);

title('原始图像');

subplot(2,2,2),imshow(J0);

title('加入零均值高斯噪声');

subplot(2,2,3),imshow(J1);

title('加入椒盐噪声');

figure,

subplot(2,2,1),imshow(J0J3);

title('对高斯噪声,采用3x3均值滤波');

subplot(2,2,2),imshow(J0J5);

title('对高斯噪声,采用5x5均值滤波');

subplot(2,2,3),imshow(J0Z3);

title('对高斯噪声,采用3x3中值滤波');

subplot(2,2,4),imshow(J0Z5);

title('对高斯噪声,采用5x5中值滤波');

figure,

subplot(2,2,1),imshow(J1J3);

title('对椒盐噪声,采用3x3均值滤波');

subplot(2,2,2),imshow(J1J5);

title('对椒盐噪声,采用5x5均值滤波');

subplot(2,2,3),imshow(J1Z3);

title('对椒盐噪声,采用3x3中值滤波');

subplot(2,2,4),imshow(J1Z5);

title('对椒盐噪声,采用5x5中值滤波');

以上就是关于图像处理颜色,纹理,形状matlab程序全部的内容,包括:图像处理颜色,纹理,形状matlab程序、求救!帮忙看一段MATLAB图像处理的程序、MATLAB数字图像处理程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9444875.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存