基于偏微分方程的图像处理.docx
- 文档编号:2823299
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:16
- 大小:21.76KB
基于偏微分方程的图像处理.docx
《基于偏微分方程的图像处理.docx》由会员分享,可在线阅读,更多相关《基于偏微分方程的图像处理.docx(16页珍藏版)》请在冰豆网上搜索。
基于偏微分方程的图像处理
《基于偏微分方程的图像处理》
1.图像的基本操作
(1)把一幅彩色图像分解为R、G、B三副单色图像;
clear;
image_I=imread('rgbtest2.bmp');
subplot(2,2,1);
imshow(image_I);
matrix_R(:
:
1)=image_I(:
:
1);
matrix_R(:
:
2)=0;
matrix_R(:
:
3)=0;
subplot(2,2,2);
imshow(matrix_R);
title('R分量');
matrix_G(:
:
2)=image_I(:
:
2);
matrix_G(:
:
1)=0;
matrix_G(:
:
3)=0;
subplot(2,2,3);
imshow(matrix_G);
title('G分量');
matrix_B(:
:
3)=image_I(:
:
3);
matrix_B(:
:
1)=0;
matrix_B(:
:
2)=0;
subplot(2,2,4);
imshow(matrix_B);
title('B分量');
(2)把一幅灰度图像分别沿x轴和y轴做反射,扩展为四倍大小;
clear;
Image=imread('graytest2.bmp');
imshow(Image);
[m,n]=size(Image);
image11=Image;
fori=1:
m
forj=1:
n
image12(i,j)=image11(i,n-j+1);
end
end
forj=1:
n
fori=1:
m
image21(i,j)=image11(m-i+1,j);
image22(i,j)=image12(m-i+1,j);
end
end
image1=[image11,image12];
image2=[image21,image22];
image=[image1;image2];
figure
imshow(image)
原图像:
扩展图像:
2.把一幅灰度图像的像素值都变换为原来的1/2使图像质量变差,然后利用Matlab图像处理工具箱中的直方图均衡化函数histeq对图像进行增强,输出原图像、质量变差图像和增强后的图像以及它们的直方图。
clear;
Image=imread('graytest2.bmp');
Image1=0.5*double(Image);
subplot(3,2,1);
imshow(Image);
subplot(3,2,2);
imhist(Image);
subplot(3,2,3);
imshow(uint8(Image1));
image1=uint8(Image1);
imwrite(image1,'graytest2_1.bmp')
subplot(3,2,4);
imhist(image1);
Image_hist=histeq(image1);
subplot(3,2,5);
imshow(Image_hist);
imwrite(Image_hist,'graytest2_2.bmp')
subplot(3,2,6);
imhist(Image_hist);
3.图像的水平集、水平线和等高线的显示和处理
(1)显示一幅灰度图像在某一水平的水平集、水平线和等高线;
functionlevel(image_name,N)
%求一图像的水平集、线
%输入参数:
image_name---图像文件名
%:
N--------阀值(0~255)
ifnargin<1
disp('请输入文件名!
!
!
');
return;
elseifnargin<2
N=128;
end
image_input=imread(image_name);
subplot(2,2,1);
imshow(image_input);
title('原图像');
[size_m,size_n]=size(image_input);
matrix_temp=zeros(size_m,size_n);
%求水平集
forrow=1:
size_m
forcol=1:
size_n
ifimage_input(row,col)>N
matrix_temp(row,col)=1;
end
end
end
subplot(2,2,2);
imshow(matrix_temp,[]);
title('图像的水平集');
imwrite(matrix_temp,'level_setzhan.bmp');
%图像矩阵扩展赋值便于处理边界
matrix_ex=zeros(size_m+2,size_n+2);
forrow=1:
size_m
forcol=1:
size_n
matrix_ex(row+1,col+1)=matrix_temp(row,col);
end
end
%四邻域反填充得水平线
matrix_new=matrix_temp;
forrow=2:
size_m+1
forcol=2:
size_n+1
ifmatrix_ex(row+1,col)==0&matrix_ex(row-1,col)==0&matrix_ex(row,col+1)==0&matrix_ex(row,col-1)==0
matrix_new(row-1,col-1)=1;
end
end
end
subplot(2,2,3);
imshow(matrix_new,[]);
title('图像的水平线');
%imwrite(matrix_new,'level_line.bmp');
%求图像的等高线
contour=zeros(size_m,size_n);
forrow=1:
size_m
forcol=1:
size_n
ifimage_input(row,col)==N
contour(row,col)=1;
end
contour(row,col)=1-contour(row,col);
end
end
subplot(2,2,4);
imshow(contour,[]);
title('图像的等高线');
%imwrite(contour,'contour.bmp');
functionlevel_line_set(image_name)
%求一图像的阀值N取各值所对应的水平线的叠加
%输入参数:
image_name---图像文件名
image_input=imread(image_name);%不变量
[size_m,size_n]=size(image_input);%不变量
matrix_out=zeros(size_m,size_n);%循环中不需重新初始化的变量
%输出矩阵初始化(白)
forrow=1:
size_m
forcol=1:
size_n
matrix_out(row,col)=1;
end
end
matrix_ex=zeros(size_m+2,size_n+2);%扩展矩阵
subplot(1,2,1);
imshow(image_input);
title('原图像');
forN=1:
32:
255%N为相应阀值
matrix_temp=zeros(size_m,size_n);%重新初始化(黑)
forrow=1:
size_m
forcol=1:
size_n
ifimage_input(row,col)>=N
matrix_temp(row,col)=1;%求水平集-----
end
end
end
%图像矩阵扩展赋值便于处理边界
forrow=1:
size_m
forcol=1:
size_n
matrix_ex(row+1,col+1)=matrix_temp(row,col);
end
end
%四邻域(黑区域填白)反填充得水平线
matrix_new=matrix_temp;
forrow=2:
size_m+1
forcol=2:
size_n+1
ifmatrix_ex(row+1,col)==0&matrix_ex(row-1,col)==0&matrix_ex(row,col+1)==0&matrix_ex(row,col-1)==0
matrix_new(row-1,col-1)=1;%填白
end
end
end
matrix_out=min(matrix_out,matrix_new);%各级水平线叠加
end
matrix_out(1,1)=0;
matrix_out(2,1)=1;
subplot(1,2,2);
imshow(matrix_out,[]);
title('图像部分水平集的叠加');
level('graytest2.bmp',100);
(2)显示图像并显示它的一族水平线(要求阀值
为32,64,96,128,160,192,224)。
functionlevel_line_set(image_name)
%求一图像的阀值N取各值所对应的水平线的叠加
%输入参数:
image_name---图像文件名
image_input=imread(image_name);%不变量
[size_m,size_n]=size(image_input);%不变量
matrix_out=zeros(size_m,size_n);%循环中不需重新初始化的变量
%输出矩阵初始化(白)
forrow=1:
size_m
forcol=1:
size_n
matrix_out(row,col)=1;
end
end
matrix_ex=zeros(size_m+2,size_n+2);%扩展矩阵
subplot(1,2,1);
imshow(image_input);
title('原图像');
forN=1:
32:
255%N为相应阀值(要求阀值
为32,64,96,128,160,192,224)。
matrix_temp=zeros(size_m,size_n);%重新初始化(黑)
forrow=1:
size_m
forcol=1:
size_n
ifimage_input(row,col)>=N
matrix_temp(row,col)=1;%求水平集-----
end
end
end
%图像矩阵扩展赋值便于处理边界
forrow=1:
size_m
forcol=1:
size_n
matrix_ex(row+1,col+1)=matrix_temp(row,col);
end
end
%四邻域(黑区域填白)反填充得水平线
matrix_new=matrix_temp;
forrow=2:
size_m+1
forcol=2:
size_n+1
ifmatrix_ex(row+1,col)==0&matrix_ex(row-1,col)==0&matrix_ex(row,col+1)==0&matrix_ex(row,col-1)==0
matrix_new(row-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 微分方程 图像 处理