基于偏微分方程的图像处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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('图像的水平线');