基于偏微分方程的图像处理.docx

上传人:b****6 文档编号:2823299 上传时间:2022-11-15 格式:DOCX 页数:16 大小:21.76KB
下载 相关 举报
基于偏微分方程的图像处理.docx_第1页
第1页 / 共16页
基于偏微分方程的图像处理.docx_第2页
第2页 / 共16页
基于偏微分方程的图像处理.docx_第3页
第3页 / 共16页
基于偏微分方程的图像处理.docx_第4页
第4页 / 共16页
基于偏微分方程的图像处理.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于偏微分方程的图像处理.docx

《基于偏微分方程的图像处理.docx》由会员分享,可在线阅读,更多相关《基于偏微分方程的图像处理.docx(16页珍藏版)》请在冰豆网上搜索。

基于偏微分方程的图像处理.docx

基于偏微分方程的图像处理

《基于偏微分方程的图像处理》

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-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1