文章目录

  • 1.MATLAB 相关问题
    • MATLAB:运行出现 “ 未定义函数或变量 ”
  • 2.图像的采样和量化
  • 3.图像的基本运算
    • 线性点运算
    • 图像的缩放
    • 图像的旋转
  • 4.图像变换
    • 傅里叶变换
    • 旋转傅里叶变换
    • 离散余弦变换
  • 5.图像增强
    • 1.灰度线性变换
    • 2.空间域平滑滤波器
    • 3.空间域锐化滤波器
    • 4.频域率平滑滤波器(高斯低通滤波器)
  • 6.图像复原
    • 1.基于均值滤波器的图像复原
    • 2.基于顺序统计滤波器的图像复原
    • 3.基于带阻滤波器的图像复原
  • 7. 图像的压缩编码
    • 1.游程编码
    • 2.基于离散余弦变换的图像压缩
  • 8.图像分割
    • 边缘检测
    • 图像分割
  • 9.彩色图像分割
  • 10.图像 的表示和描述

1.MATLAB 相关问题

MATLAB:运行出现 “ 未定义函数或变量 ”

先检查是不是拼写错误,详细可以看
MATLAB:运行出现 “ 未定义函数或变量 ”

2.图像的采样和量化


emmm看见b站一个像素头像制作的视频,评论有说用马赛克,才意识到马赛克就是图像采样,那就可以用matlab做,但是我发现上面的这代码处理不了彩色的,会变成三个黑白的被采样的图像。具体为啥以后有兴趣再看吧。

clc
clear all
close all
addpath C:\Users\可乐猫\Desktop\1.jpg
I=imread('1.jpg');[row,line,z]=size(I);
J=I(1:10:row,1:10:line,:);%隔行采样,隔列采样
imwrite(J,'result.jpg'); %保存图像
figure,imshow(J);



3.图像的基本运算

线性点运算

clc
close all
clear all
addpath E:\study\数字图像处理\实验\1\ lenagray.jpg
I=imread('lenagray.jpg'); %读取图片
I=im2double(I);           %转换数据类型为doublefigure(1);subplot(2,2,1);
imshow(I);title('实验人:李诗雨','fontsize',7),xlabel('(a1) 原图'); %显示原图像figure(1);subplot(2,2,2);
a = 1.5;b = 50;             %增加对比度
o = a .* I + b/255;
imshow(o);title('实验人:李诗雨','fontsize',7),xlabel('(a2) a=1.5,b=50,增加对比度'); %显示图像1figure(1);subplot(2,2,3);
a = 0.3;b = 50;
o = a .* I +b/255;
imshow(o);title('实验人:李诗雨','fontsize',7),xlabel('(a3) a=0.3,b=50,减小对比度'); %显示图像2figure(1);subplot(2,2,4);
a = -1;b = 50;
o = a .* I +b/255;
imshow(mat2gray(o));title('实验人:李诗雨','fontsize',7),xlabel('(a4) a=-1,b=50,反色'); %显示图像3

图像的缩放

clc
close all
clear all
addpath E:\study\数字图像处理\实验\1\ lenagray.jpg
I=imread('lenagray.jpg'); %读取图片
I=im2double(I);           %转换数据类型为double
%对图像比例放大1.5倍,比例缩小0.7倍,非比例放大到600x700像素,非比例缩小到300x400像素。
figure(1);subplot(2,3,1);
imshow(I);title('实验人:李诗雨','fontsize',7),xlabel('(b1) 原图'); %显示原图像J1=imresize(I,1.5,'bilinear');
figure(1);subplot(2,3,2);
imshow(J1);title('实验人:李诗雨','fontsize',7),xlabel('(b2) 比例放大1.5倍'); %显示原图像J2=imresize(I,0.7,'bilinear');
figure(1);subplot(2,3,3);
imshow(J2);title('实验人:李诗雨','fontsize',7),xlabel('(b3) 比例缩小0.7倍'); %显示原图像J3=imresize(I,[600,700],'bilinear');
figure(1);subplot(2,3,4);
imshow(J3);title('实验人:李诗雨','fontsize',7),xlabel('(b4) 非比例放大到600x700像素 '); %显示原图像J4=imresize(I,[300,400],'bilinear');
figure(1);subplot(2,3,5);
imshow(J4);title('实验人:李诗雨','fontsize',7),xlabel('(b5) 非比例缩小到300x400像素'); %显示原图像

图像的旋转

clc
close all
clear all
addpath E:\study\数字图像处理\实验\1\ cameraman.tif
I=imread('cameraman.tif'); %读取图片
I=im2double(I);           %转换数据类型为double
%对图像旋转30度、60度、90度、135度和180度。
figure(1);subplot(2,3,1);
imshow(I);title('实验人:李诗雨','fontsize',7),xlabel('(c1) 原图'); %显示原图像J1=imrotate(I,30,'bilinear');
figure(1);subplot(2,3,2);
imshow(J1);title('实验人:李诗雨','fontsize',7),xlabel('(c2) 旋转 30度'); J2=imrotate(I,60,'bilinear');
figure(1);subplot(2,3,3);
imshow(J2);title('实验人:李诗雨','fontsize',7),xlabel('(c2) 旋转 60度'); J3=imrotate(I,90,'bilinear');
figure(1);subplot(2,3,4);
imshow(J3);title('实验人:李诗雨','fontsize',7),xlabel('(c2) 旋转 90度'); J4=imrotate(I,135,'bilinear');
figure(1);subplot(2,3,5);
imshow(J4);title('实验人:李诗雨','fontsize',7),xlabel('(c2) 旋转 135度'); J5=imrotate(I,180,'bilinear');
figure(1);subplot(2,3,6);
imshow(J5);title('实验人:李诗雨','fontsize',7),xlabel('(c2) 旋转 180度');

4.图像变换

傅里叶变换

  • I=im2double(I);
  • imshow(I3,[5,50])
close all
clear all
addpath E:\study\数字图像处理\实验\4\ face.jpg
addpath E:\study\数字图像处理\实验\4\ cameraman.tif
addpath E:\study\数字图像处理\实验\4\ lena.jpg
I =imread('face.jpg');I=im2double(I);
J =imread('cameraman.tif');J=im2double(J);
K =imread('lena.jpg');K=im2double(K); %求傅里叶变换
If = fft2(I);Jf = fft2(J); Kf = fft2(K);
If1 =abs(If);Jf1 = abs(Jf); Kf1 = abs(Kf);
If2 = fftshift(If1); Jf2 = fftshift (Jf1); Kf2 = fftshift(Kf1);
%显示图像
%原图
subplot(3,3,1);imshow(I);title('实验人:李诗雨'),xlabel('(a1)原图 ');
subplot(3,3,2);imshow(J);title('实验人:李诗雨'),xlabel('(a2)原图 ');
subplot(3,3,3);imshow(K);title('实验人:李诗雨'),xlabel('(a3)原图 ');
%快速傅里叶变换的图
subplot(3,3,4);imshow(If,[5,30]);title('实验人:李诗雨'),xlabel('(a1)频谱图 ');
subplot(3,3,5);imshow(Jf,[5,30]);title('实验人:李诗雨'),xlabel('(a2)频谱图 ');
subplot(3,3,6);imshow(Kf,[5,30]);title('实验人:李诗雨'),xlabel('(a3)频谱图 ');
%傅里叶变换频谱中间零频率的图
subplot(3,3,7);imshow(If2,[5,30]);title('实验人:李诗雨'),xlabel('(a1)中心移到零点的频谱图 ');
subplot(3,3,8);imshow(Jf2,[5,30]);title('实验人:李诗雨'),xlabel('(a2)中心移到零点的频谱图 ');
subplot(3,3,9);imshow(Kf2,[5,30]);title('实验人:李诗雨'),xlabel('(a3)中心移到零点的频谱图 ');

旋转傅里叶变换

利用Matlab生成给定的图像,并对其进行旋转30度、90度和120度,然后对他们分别进行傅里叶变换。

clc
close all
clear all
%构造原始图像
I = zeros(256,256); I(28:228,108:148) = 1;
%旋转图像
I1=imrotate(I,30,'bilinear');
I2=imrotate(I,90,'bilinear');
I3=imrotate(I,120,'bilinear');
%傅里叶变换
If=fft2(I);F=abs(If);If=fftshift(F);
I1f=fft2(I1);F=abs(I1f);I1f=fftshift(F);
I2f=fft2(I2);F=abs(I2f);I2f=fftshift(F);
I3f=fft2(I3);F=abs(I3f);I3f=fftshift(F);
%显示图像
subplot(2,4,1);imshow(I);title('实验人:李诗雨'),xlabel('(b)原图 ');
subplot(2,4,2);imshow(I1);title('实验人:李诗雨'),xlabel('(b1)原图 旋转30度 ');
subplot(2,4,3);imshow(I2);title('实验人:李诗雨'),xlabel('(b2)原图 旋转90度');
subplot(2,4,4);imshow(I3);title('实验人:李诗雨'),xlabel('(b3)原图 旋转120度');subplot(2,4,5);imshow(If,[5,50]);title('实验人:李诗雨'),xlabel('(b)原图像傅里叶频谱 ');
subplot(2,4,6);imshow(I1f,[5,50]);title('实验人:李诗雨'),xlabel('(b1)原图旋转30度 傅里叶图谱 ');
subplot(2,4,7);imshow(I2f,[5,50]);title('实验人:李诗雨'),xlabel('(b2)原图旋转90度 傅里叶图谱 ');
subplot(2,4,8);imshow(I3f,[5,50]);title('实验人:李诗雨'),xlabel('(b3)原图旋转120度 傅里叶图谱 ');


*I = zeros(256,256); I(60:196,60:196) = 1;
**置1,是白色,0,黑色,I(行第a个像素:到行第b个像素,列第c个像素:到列第d个像素)
更改这个之后:

离散余弦变换

用DCT变换对图像进行图像压缩,求经压缩、解压后的图像。

clc
close all
clear all
addpath E:\study\数字图像处理\实验\4\ face.jpg
I =imread('face.jpg');
[M,N]=size(I);%M=512,N=512
I=im2double(I); %生成标准DCT变化中的矩阵(8x8)
n=8;[cc,rr]=meshgrid(0:n-1);
C=sqrt(2/n)*cos(pi*(2*cc+1).*rr/(2*n));
C(1,:)=C(1,:)/sqrt(2);%光亮度量化表
a=[16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 22 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99 ];%分块做DCT变换(8x8) DCT变换公式 正变换Y=CIC'
for i=1:8:Mfor j=1:8:NP=I(i:i+7,j:j+7);K=C*P*C';I1(i:i+7,j:j+7)=K;K=K./a; %量化(按位除)K(abs(K)<0.03)=0;I2(i:i+7,j:j+7)=K;  end
end%分块做DCT反变换(8x8),逆变换 P=C'YC
for i=1:8:Mfor j=1:8:NP=I2(i:i+7,j:j+7).*a;%反量化K=C'*P*C;I3(i:i+7,j:j+7)=K;     end
endsubplot(2,2,1);imshow(I);title('实验人:李诗雨'),xlabel('(c1)原图 ');
subplot(2,2,2);imshow(I1);title('实验人:李诗雨'),xlabel('(c2)DCT变换后的频域图像 ');
subplot(2,2,3);imshow(I2);title('实验人:李诗雨'),xlabel('(c3)量化后的频域图像 ');
subplot(2,2,4);imshow(I3);title('实验人:李诗雨'),xlabel('(c4) 复原图像 ');


使用face图像做实验,DCT压缩时,舍掉的变换系数分别小于0.01、0.03、0.05

   K(abs(K)<0.01)=0;

   K(abs(K)<0.05)=0;

5.图像增强

1.灰度线性变换

对曝光不足的图像采用灰度线性变换对图像每一个像素灰度做线性拉伸。

clc
close all
clear all
addpath E:\study\数字图像处理\实验\5\ figure51.jpg
I=imread('figure51.jpg'); %读取图片
I=im2double(I);           %转换数据类型为doublefigure(1);subplot(1,2,1);
imshow(I);title('实验人:李诗雨'),xlabel('(a1) 原图'); %显示原图像figure(1);subplot(1,2,2);
a = 1.5;b = -150;             %增加对比度
o = a .* I + b/255;
imshow(o);title('实验人:李诗雨'),xlabel('(a2) a=1.5,b=-150,增加对比度'); 

2.空间域平滑滤波器

添加均值为0,方差为0.05的高斯噪声,进行3x3、5x5邻域平滑,参考课本85页程序


clc
close all
clear all
addpath E:\study\数字图像处理\实验\5\ lena.jpg
I=imread('lena.jpg'); %读取图片
subplot(2,2,1);imshow(I);title('实验人:李诗雨'),xlabel('(b1) 原图'); %显示原图像I_noise=double(imnoise(I,'gaussian',0.05));
subplot(2,2,2);imshow(I_noise,[]);title('实验人:李诗雨'),xlabel('(b2) 加入噪声后图像'); I_smoothed1=imfilter(I_noise,fspecial('average',3));
subplot(2,2,3);imshow(I_smoothed1,[]);title('实验人:李诗雨'),xlabel('(b3) 3x3 邻域平滑的图像');I_smoothed2=imfilter(I_noise,fspecial('average',5));
subplot(2,2,4);imshow(I_smoothed2,[]);title('实验人:李诗雨'),xlabel('(b4) 5x5 邻域平滑的图像');

3.空间域锐化滤波器

利用Prewitt、Sobel对图像进行锐化。

clc
close all
clear all
addpath E:\study\数字图像处理\实验\5\ lena.jpg
I=imread('lena.jpg'); %读取图片
subplot(2,2,1);imshow(I);title('实验人:李诗雨'),xlabel('(c1) 原图'); %显示原图像I_sharpening1=imfilter(I,fspecial('Prewitt'));
subplot(2,2,2);imshow(I_sharpening1,[]);title('实验人:李诗雨'),xlabel('(c2)  Prewitt锐化的图像');I_sharpening2=imfilter(I,fspecial('Sobel'));
subplot(2,2,3);imshow(I_sharpening2,[]);title('实验人:李诗雨'),xlabel('(c3)  Sobel锐化的图像');

4.频域率平滑滤波器(高斯低通滤波器)

实验(4)使用给定的图像lena做实验,参考课本92页的巴特沃斯低通滤波器程序和课本93页的(5.31)式子,取n=2即为高斯低通滤波器,sig2=100,sig2=400,sig^2=1600

clc
close all
clear all
addpath E:\study\数字图像处理\实验\4\ lena.jpg
I=imread('lena.jpg');
subplot(2,2,1);imshow(I);title('实验人:李诗雨'),xlabel('(d1)原图 ');I1=fftshift(fft2(I));
[M,N]=size(I1);
n=2;sig=10;
n1=floor(M/2);n2=floor(N/2);
for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指数函数I2(i,j)=H*I1(i,j);end
end
I2=ifftshift(I2);
I3=real(ifft2(I2));
subplot(2,2,2);
imshow(I3,[]);
title('实验人:李诗雨'),xlabel('(d2)高斯低通滤波器 sig^2=100 ');n=2;sig=20;
n1=floor(M/2);n2=floor(N/2);
for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指数函数I2(i,j)=H*I1(i,j);end
end
I2=ifftshift(I2);
I3=real(ifft2(I2));
subplot(2,2,3);
imshow(I3,[]);
title('实验人:李诗雨'),xlabel('(d3)高斯低通滤波器 sig^2=400 ');n=2;sig=40;
n1=floor(M/2);n2=floor(N/2);
for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2);H=exp(-((d^2/(2*sig^2))));%e的指数函数I2(i,j)=H*I1(i,j);end
end
I2=ifftshift(I2);
I3=real(ifft2(I2));
subplot(2,2,4);
imshow(I3,[]);
title('实验人:李诗雨'),xlabel('(d4)高斯低通滤波器 sig^2=1600 ');


书上公式错的。。。。
正确公式:

6.图像复原

1.基于均值滤波器的图像复原

clc
close all
clear all
addpath E:\study\数字图像处理\实验\6\ cameraman.tifI=imread('cameraman.tif'); %读取图片
subplot(2,3,1); imshow(I);title('实验人:李诗雨'),xlabel('(a1)原图 ');  I_noise=double(imnoise(I,'gaussian',0.06));
subplot(2,3,2); imshow(I_noise,[]);title('实验人:李诗雨'),xlabel('(a2)高斯噪声污染的图像 ');  I_mean=imfilter(I_noise,fspecial('average',3));
subplot(2,3,3);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(a3)用3x3算数均值滤波器滤波 '); I_mean=exp(imfilter(log(I_noise),fspecial('average',3)));
subplot(2,3,4);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(a4)用3x3几何均值滤波器滤波 '); Q=-1.5;
I_mean=imfilter(I_noise.^(Q+1),fspecial('average',3))./imfilter(I_noise.^Q,fspecial('average',3));
subplot(2,3,5);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(a5)Q=-1.5的逆谐波滤波器滤波 '); Q=1.5;
I_mean=imfilter(I_noise.^(Q+1),fspecial('average',3))./imfilter(I_noise.^Q,fspecial('average',3));
subplot(2,3,6);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(a6)Q=1.5的逆谐波滤波器滤波 '); 

2.基于顺序统计滤波器的图像复原

clc
close all
clear all
addpath E:\study\数字图像处理\实验\6\ cameraman.tifI=imread('cameraman.tif'); %读取图片
subplot(1,4,1); imshow(I);title('实验人:李诗雨'),xlabel('(b1)原图 ');  I_noise=double(imnoise(I,'salt & pepper',0.06));
subplot(1,4,2); imshow(I_noise,[]);title('实验人:李诗雨'),xlabel('(b2)椒盐噪声污染的图像 ');  I_mean=imfilter(I_noise,fspecial('average',5));
subplot(1,4,3);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(b3)算数均值滤波器滤波 '); I_mean=medfilt2(I_noise);
subplot(1,4,4);imshow(I_mean,[]);title('实验人:李诗雨'),xlabel('(b4)中值滤波器滤波 '); 

3.基于带阻滤波器的图像复原

clc
close all
clear all
addpath E:\study\数字图像处理\实验\6\ lenazhouqizaosheng.jpgI=imread('lenazhouqizaosheng.jpg'); %读取图片
[M,N]=size(I);%得到图像的高度和宽度
subplot(1,4,1); imshow(I);title('实验人:李诗雨'),xlabel('(c1)含有周期噪声的图像 ');  IF=fftshift(fft2(I));%对含噪图像作傅里叶变换,并将原定啊移至图像中心
IFV=log(1+abs(IF));%含噪图像的频谱
subplot(1,4,2); imshow(IFV,[]);title('实验人:李诗雨'),xlabel('(c2)含噪图像的频谱 ');  freq=90;%设置带阻滤波器中心频率
width=5;%设置带阻滤波器频带宽度
ff=ones(M,N);
for i=1:Mfor j=1:Nff(i,j)=1-exp(-0.5*((((i-M/2)^2+(j-N/2)^2)-freq^2)/(sqrt(i.^2+j.^2)*width))^2);%高斯带阻滤波器end
endsubplot(1,4,3);imshow(ff,[]);title('实验人:李诗雨'),xlabel('(c3)高斯带阻滤波器 '); out=IF.*ff;%矩阵点乘实现频域滤波
out=ifftshift(out);%原点移回左上角
out=ifft2(out);%傅里叶逆变换
out=abs(out);%取绝对值
out=out/max(out(:));%归一化subplot(1,4,4);imshow(out,[]);title('实验人:李诗雨'),xlabel('(c4)滤波效果图 '); 

7. 图像的压缩编码

1.游程编码

clc
close all
clear all
addpath E:\study\数字图像处理\实验\7\ lena.jpg%主程序
I=imread('lena.jpg'); %读取图片
BW=im2bw(I,0.2);       %对图像二值化,二值化阈值为0.2
[zipped,info]=RLEencode(BW); %调用RLEcode函数对BW进行游程编码
unzipped=RLEdecode(zipped,info);%调用RLEencode函数对zipped进行游程编码
subplot(1,3,1);imshow(I);title('实验人:李诗雨'),xlabel('(a1) 原图'); %显示原图像
subplot(1,3,2);imshow(BW);title('实验人:李诗雨'),xlabel('(a2) 二值化阈值为0.2,二值化后的图像');
subplot(1,3,3);imshow(uint8(unzipped)*255);title('实验人:李诗雨'),xlabel('(a3) 经游程编码和解码后的图像'); %显示二值图像经编解码后的图像
cr=info.ratio; %显示压缩比
whos BW unzipped zipped %显示二值图像,压缩解压图像,压缩图像的信息%游程编码函数
function [zipped,info]=RLEencode(vector)
[m,n]=size(vector);  %获取图像的高度和宽度
vector=uint8(vector(:));%转换成整型
L=length(vector) %得到元素个数
c=vector(1); %获取第一个像素值
e(1,1)=double(c);  %游程矩阵第一列为值
e(1,2)=0; %游程矩阵第二列为游程长度
t1=1; %游程矩阵下标变量
for j=1:L      %对图像所有元素循环处理if(vector(j)==c) %如果值不变e(t1,2)=(e(t1,2))+1; %将游程长度加1else               %如果值改变c=vector(j);  %记录新的值t1=t1+1;   %游程矩阵行下标变量加1e(t1,1)=double(c); %游程矩阵新1行第1列的值e(t1,2)=1; %游程矩阵新1行第2列的值(游程长度)end
endzipped=e;    %游程矩阵
info.rows=m;info.cols=n;  %记录原图像的宽度和高度
[m,n]=size(e); %获取游程矩阵的高度和宽度
info.ratio=(info.rows*info.cols)/(m*n); %显示压缩比
end%游程编码的解码函数程序
function unzipped=RLEdecode(zip,info)
%zip=uint8(zip);   %将游程矩阵转换成整型
[m,n]=size(zip);  %获取游程矩阵的高度和宽度
unzipped=[];     %解压矩阵初始化
for i=1:m        %对游程矩阵的每一行都进行循环处理section=repmat(uint8(zip(i,1)),1,zip(i,2)); %第i行复制还原unzipped=[unzipped section];   %与矩阵前面的部分进行拼接
end
unzipped=reshape(unzipped,info.rows,info.cols); %按原图像形式重新安排矩阵
end

2.基于离散余弦变换的图像压缩

根据公式 ,编写程序计算原图像和上述三种模板下得到不同的压缩编码图像之间的均方误差。


e=sqrt(mse(abs(I2-I))); %计算压缩编码图像之间的均方误差。

clc
close all
clear all
addpath E:\study\数字图像处理\实验\7\ lena.jpg
I=imread('lena.jpg'); %读取图片
I=im2double(I);
T=dctmtx(8);  %离散余弦变换矩阵
B=blkproc(I,[8 8],'P1*x*P2',T,T'); %对原图像分块进行DCT变换
mask = [1 1 1 0 0 0 0 0;1 1 1 0 0 0 0 0;1 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0];%设置模板矩阵mask1
B2=blkproc(B,[8 8],'P1.*x',mask);%数据压缩,丢弃右下角高频数据
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);%进行DCT反变换,得到压缩后的图像e=sqrt(mse(abs(I2-I))); %计算压缩编码图像之间的均方误差。
subplot(1,2,1);imshow(I);title('实验人:李诗雨'),xlabel('(b5) 原图'); %显示原图像
subplot(1,2,2);imshow(I2);title('实验人:李诗雨'),xlabel('(b6) 经过压缩解压后的图像'); 

8.图像分割

边缘检测

采用sobel、prewitt、roberts和log对图像及其加上噪声后的图像进行边缘检测。

clc
close all
clear all
addpath E:\study\数字图像处理\实验\8\ chair.jpg
a=imread('chair.jpg');
% a=imnoise(a,'gaussian',0.05);
bw1=edge(a,'sobel');
bw2=edge(a,'prewitt');
bw3=edge(a,'roberts');
bw4=edge(a,'log',[],4);
subplot(2,3,1);imshow(a);title('实验人:李诗雨'),xlabel('(a1) 原图'); %显示原图像
subplot(2,3,2);imshow(bw1);title('实验人:李诗雨'),xlabel('(a2) sobel 算子');
subplot(2,3,3);imshow(bw2);title('实验人:李诗雨'),xlabel('(a3) prewitt 算子');
subplot(2,3,4);imshow(bw3);title('实验人:李诗雨'),xlabel('(a4) robrtts 算子');
subplot(2,3,5);imshow(bw4);title('实验人:李诗雨'),xlabel('(a5) log 算子');


加噪声后:

 a=imnoise(a,'gaussian',0.05);

图像分割

clc,close all,clear all
addpath E:\study\数字图像处理\实验\8\ cell.jpg
x=imread('cell.jpg');
x=im2double(x);
[m,n]=size(x);
subplot(1,3,1);imshow(x);title('实验人:李诗雨'),xlabel('(b1) 原图'); %显示原图像
level=graythresh(x);bw=im2bw(x,level);
subplot(1,3,2);imshow(bw);title('实验人:李诗雨'),xlabel('(b2) 最大类间方差阈值选择法');
x=double(x);t=(min(x(:))+max(x(:)))/2;done=false;
i=0;
while ~doner1=find(x<=t);r2=find(x>t);tnew=(mean(x(r1))+mean(x(r2)))/2;done=abs(tnew-t)<1;t=tnew;i=i+1;
end
x(r1)=0;
x(r2)=1;
subplot(1,3,3);imshow(x);title('实验人:李诗雨'),xlabel('(b3) 迭代法');

9.彩色图像分割

clc,close all,clear all
addpath E:\study\数字图像处理\实验\9\ honghua.jpg
rgb=imread('honghua.jpg');
subplot(2,2,1);imshow(rgb);title('实验人:李诗雨'),xlabel(' 原图'); %显示原图像
rgb1=im2double(rgb);
r=rgb1(:,:,1);%图像的红色分量
g=rgb1(:,:,2);%图像的绿色分量
b=rgb1(:,:,3);%图像的蓝色分量
r1=r(130:195,86:170);%在红分量中选择一块矩形区域,由输入可知size(r)=(195 ,218),改变选择的行列可以改变标准偏差的标准值
r1_u=mean(mean(r1(:)));%计算该矩形区域的均值
[m,n]=size(r1);%得到该矩形区域的高度和宽度
sd1=0.0;%该区域标准偏差变量
for i=1:mfor j=1:nsd1=sd1+(r1(i,j)-r1_u)*(r1(i,j)-r1_u);%二重循环对差值的平均进行累加end
end
r1_d=sqrt(sd1/(m*n));%计算得到该区域的标准偏差
r2=zeros(size(rgb1,1),size(rgb1,2));ind=find((r>r1_u-1.10*r1_d)&(r<r1_u+1.10*r1_d));%找到符合条件的点
I1=r2;
I1(ind)=1;%将符合条件的点的灰度值赋值为1
subplot(2,2,2);imshow(I1);title('实验人:李诗雨'),xlabel(' 标准差为1.10'); ind=find((r>r1_u-1.20*r1_d)&(r<r1_u+1.20*r1_d));
I2=r2;
I2(ind)=1;
subplot(2,2,3);imshow(I2);title('实验人:李诗雨'),xlabel(' 标准差为1.20'); ind=find((r>r1_u-1.30*r1_d)&(r<r1_u+1.30*r1_d));
I3=r2
I3(ind)=1;
subplot(2,2,4);imshow(I3);title('实验人:李诗雨'),xlabel(' 标准差为1.30'); 


标准差为1.3效果比较好(但是把绿色也分割进去了)。

10.图像 的表示和描述

clc,clear,close all;
addpath E:\study\大二下\数字图像处理\实验\10\纹理图像集\纹理图像集
percent=[];%正确率数组
for n=1:10train=[];test=[];index=0;%测试集下标for i=1:8P=randperm(8);%随机序列for j=1:4train{i,j}=strcat(int2str(i),int2str(P(j)),'.jpg');%随机训练集endfor j=5:8index=index+1;test{index}=strcat(int2str(i),int2str(P(j)),'.jpg');  %随机测试集endend[M,N]=size(train);%训练集大小X=[];for i=1:Mfor j=1:Nname=char(train(i,j));img_train=imread(name);%读取训练集图片glcm=graycomatrix(img_train,'Offset',[-1 -1],'NumLevels',4);%计算灰度共生矩阵,135度方向,d=1,量化级数4stats = graycoprops(glcm, 'all');%计算对比度、相关、能量、均匀度out= entropy(img_train); %计算出整幅图的熵X(i,j,:)=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%训练集特征向量endendtruenum=0;for i=1:indexx=[];name=char(test(i));img_test=imread(name);%读取测试集图片glcm=graycomatrix(img_test,'Offset',[-1 -1],'NumLevels',4);%计算灰度共生矩阵,135度方向,d=1,量化级数4stats = graycoprops(glcm, 'all');%计算对比度、相关、能量、均匀度out= entropy(img_train); %计算出整幅图的熵x=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%测试集特征向量gix=[];for j=1:Modist=[];%第j类的欧式距离数组for k=1:Na=X(j,k,:);a=a(:)';%训练集特征向量odist(k)=norm(a-x);%求欧氏距离endgix(j)=min(odist);%第j类中最小欧氏距离end[gjx,mindex]=min(gix);%最小欧氏距离及其类别fprintf('%s属于第%d类    ',name,mindex);if mod(i,4)==0fprintf('\n');%每四个换一次行endnum=str2num(name(1));%正确的类别if num==mindextruenum=truenum+1;%求分类正确的数量endendpercent(n)=truenum/32;%求分类正确率fprintf('正确率为:%f\n',percent(n));
end
fprintf('10次平均正确率为:%f\n',mean(percent));%求平均分类正确率

数字图像处理 matlab实现相关推荐

  1. 【资源分享】数字图像处理MATLAB版冈萨雷斯+中文高清版+随书源码链接

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 1.数字图像处理MATLAB版冈萨雷斯+中文高清版 2.数字图像处理MATLAB版冈萨雷斯随书源码 1.数字图像处 ...

  2. 【数字图像处理matlab】(HSI变换融合算法)

    [数字图像处理matlab](HSI变换融合算法) 输入一张高分辨率的全色影像HR,一张低分辨率的多光谱影像MS,采用HSI变换融合算法实现影像融合,其中RGB与HSI影像的相互转换调用自定义函数RG ...

  3. 《数字图像处理 MATLAB版》学习笔记

    学习教材:<数字图像处理 MATLAB版>(第二版) 冈萨雷斯 学习过程中的图片代码和及我收集的一些关于数字图像处理的其他学习资料,需要的可以评论留下邮箱(需要购买专栏),加油 文章目录 ...

  4. 数字图像处理MATLAB学习笔记(五)

    数字图像处理MATLAB学习笔记(五) Color Image Processing 1 Color Image Representation in MATLAB 这里不多说了,彩色图片在计算机中以R ...

  5. [数字图像处理Matlab]任选一幅灰度图,自行编写程序,完成直方图均衡化。鼠鼠的数字图像处理实验要求:不能用MATLAB自带的histeq函数实现直方图均衡化

    数学理论前提:见数字图像处理(第三版) 李俊山等编著  p50-53 1.利用imhist函数统计像素点个数 Im = imread("C:\Users\鼠鼠\Desktop\数字图像处理m ...

  6. 图像处理----入门资料,Matlab r2019最新版,r2008a,《数字图像处理》冈萨雷斯 第三版 《数字图像处理 Matlab 版》

    研究生想研究的方向是图像处理,现在离开学还有四个月,希望能稍微入门吧.同时也希望通过博客的形式记录一下学习的进度,学习的心情.目前学习两周,安装了基本的软件,收集书籍,学习了灰度变换,空间滤波,频率滤 ...

  7. 数字图像处理matlab作业,数字图像处理matlab大作业

    <数字图像处理matlab大作业>由会员分享,可在线阅读,更多相关<数字图像处理matlab大作业(23页珍藏版)>请在人人文库网上搜索. 1.几个图像处理实例,matlab ...

  8. 【数字图像处理matlab】(边界跟踪-光栅扫描法)

    [数字图像处理matlab](边界跟踪-光栅扫描法) 调用Matlab自带图像测试,光栅扫描法实现边界跟踪. function coor = edge_search(I) %边缘跟踪 %输入:灰度图矩 ...

  9. 数字图像处理MATLAB学习笔记(一)

    数字图像处理MATLAB学习笔记(一) 灰度转换与空间滤波 本节主要使用Matlab语言进行灰度转换与空间滤波的使用 并对相关数学原理进行总结 1. Intensity Transformer Fun ...

  10. 数字图像处理matlab实验对图像复原,数字图像处理实验07图像的复原处理

    数字图像处理实验 一.数字图像处理实验 实验七 图像的复原处理 一.实验目的 熟悉几种在实际应用中比较重要的图像复原技术,学会用MATLAB复原函数对退化图像进行复原处理. 二.实验内容 1.用点扩散 ...

最新文章

  1. Intel发布FPGA
  2. python 文件命令
  3. sublime text3 注册码,亲测可用
  4. 《Java开发手册》解读:大整数传输为何禁用Long类型?
  5. DevOps案例研究:知人善任——Google敏捷核心文化
  6. javaweb项目搭建ehcache缓存系统
  7. JAVA递归实现全排列
  8. C#LeetCode刷题之#859-亲密字符串​​​​​​​​​​​​​​(Buddy Strings)
  9. Mysql客户端是不是jdbc_关于JDBC连接MySQL的问题,我一直解决不了(Myeclipse 环境下)...
  10. python spark2.0_Python+Spark2.0+hadoop学习笔记——Python Spark MLlib决策树二分类
  11. scrollTop以及页面回到顶部
  12. 抖音视频选择封面android,抖音视频封面怎么选取?
  13. 计算机一直黑屏,win7系统显示器黑屏但电脑一直在运行如何解决
  14. 计算机usb接口打开方法,电脑USB接口被禁用如何开启?
  15. 什么邮箱最好用?主流邮箱品牌如何选择
  16. 【问题解决】Springboot项目启动日志不显示端口号,而且日志也很少!
  17. matlab 面 颜色,matlab曲面颜色
  18. ios开发---音乐播放器之怎么获取音乐列表
  19. 什么是SEO?搜索引擎优化是什么意思?
  20. 火车头采集翻页内容_火车头采集器教程:使用分页采集有分页的数据

热门文章

  1. 初级运维工程师面试问题
  2. 从零搭建创业公司后台技术栈
  3. java如何调c 的接口_JAVA中调用C语言接口
  4. account-security-noreply@accountprotection.microsoft.com
  5. Java实现算法竞赛入门经典例题-蚂蚁
  6. pythonxy安装包_python安装pip|pythonxy安装的时候选择了装到F盘,但是python27还是自动装在了C判,有没有办法都弄到F盘啊...
  7. cmd 默认编码以及切换
  8. mysql核心知识之视图的应用
  9. Java 泛型中的 PECS 原则
  10. 史上最全的xpath定位方法 全在这了!