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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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;

for i=1:m

for j=1:n

image12(i,j)=image11(i,n-j+1);

end

end

for j=1:n

for i=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)显示一幅灰度图像在某一水平的水平集、水平线和等高线;

function level(image_name,N)

%求一图像的水平集、线

%输入参数:image_name---图像文件名

% :N--------阀值(0~255)

if nargin<1

disp('请输入文件名!!!');

return;

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

% 求水平集

for row=1:size_m

for col=1:size_n

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

for row=1:size_m

for col=1:size_n

matrix_ex(row+1,col+1)=matrix_temp(row,col);

end

end

% 四邻域反填充得水平线

matrix_new=matrix_temp;

for row=2:size_m+1

for col=2:size_n+1

if matrix_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('图像的水平线');

相关文档
最新文档