• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB 图像打开保存

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、图片读取保存

(1)读取

clear all
[filename,pathname]=uigetfile({\'*.jpg\';\'*.bmp\';\'*.gif\'},\'选择图片\');
if isequal(filename,0)
    disp(\'Users Selected Canceled\');
else
str=[pathname filename];
im = imread(str);
imshow(im);
end

(2)保存

clear all
x=0:0.01:2*pi;
plot(x,sin(x));

[filename,pathname]=uiputfile({\'*.bmp\';},\'保存图片\');%路径和图片名
if ~isequal(filename,0)
    str = [pathname filename];%路径名
    data= getframe(gcf);%图片内容数据
    imwrite(data.cdata,str,\'bmp\');
%     saveas(gcf,str,\'bmp\');%两种方式都可以保存图片
    close(gcf);
 else
    disp(\'保存失败\');
end

 

二、灰度图和彩色图

(1)

图像中的单个点称为像素(pixel),每个像素都有一个值,称为像素值,它表示特定颜色的强度。

对于黑白图,是指每个像素的颜色用二进制的1位来表示,那末颜色只有“1”和“0”这两个值。这也就是说,要么是黑,要么是白。

对于灰度图,如果不用合成的方式来表达,可以表示为(0),(123),(255)。

 如果用颜色合成的方式来表达,即它的一个像素值往往用R,G,B三个分量表示,注意,是RGB合成来表示一个像素的颜色。但要注意的                    是RGB  分量必须都相等,否则就成彩色了。比如为(0,0,0)为黑,(123,123,123)为某种灰色,(255,255,255)为白。 

clear all;
[filename,pathname]=uigetfile(\'*.*\',\'select an image\');
sample=imread([pathname filename]);%原始图
gray=rgb2gray(sample);%灰白图
bw=im2bw(sample);%黑白图
subplot(311),imshow(sample);
title(\'原图\')
subplot(312),imshow(gray);
title(\'灰度图\')
subplot(313),imshow(bw);
title(\'黑白图\')

 

(2)rgb三分量分别表示

r=sample(:,:,1);
g=sample(:,:,2);
b=sample(:,:,3);
subplot(131),imshow(r);
subplot(132),imshow(g);
subplot(133),imshow(b);

  

三、filter2、conv2和imfilter 平滑处理

(1)

 

clear all;
clear all
[filename,pathname]=uigetfile(\'*.*\',\'select an image\');
sample=imread([pathname filename]);

mean3Sample = filter2(fspecial(\'average\',3),sample)/255;
mean5Sample = filter2(fspecial(\'average\',5),sample)/255;
mean7Sample = filter2(fspecial(\'average\',7),sample)/255;
gaussianSample = filter2(fspecial(\'gaussian\'),sample)/255;

subplot(2,2,1);
imshow(sample); %原始图像
title(\'原始图像\')

subplot(2,2,2);
imshow(mean3Sample); %采用均值进行平滑处理
title(\'平均滤波器(3)平滑处理\')

subplot(2,2,3);
imshow(mean7Sample); %原始图像
title(\'平均滤波器(7)平滑处理\')

subplot(2,2,4);
imshow(gaussianSample); %高斯滤波器进行平滑处理
title(\'高斯滤波器平滑处理\')

conv3Sample = conv2(fspecial(\'average\',3),sample)/255;
conv7Sample = conv2(fspecial(\'average\',7),sample)/255;
convSample = conv2(fspecial(\'gaussian\'),sample)/255;

figure
subplot(321),imshow(mean3Sample)
title(\'filter2滤波\')
subplot(322),imshow(conv3Sample)
title(\'conv2法\')

subplot(323),imshow(mean7Sample)
subplot(324),imshow(conv7Sample)

subplot(325),imshow(gaussianSample)
subplot(326),imshow(convSample)

这两个函数只能针对二维图像。滤波器本质就是加权。

(2)分别采用’prewitt’和’sobel’边缘算子对图像做边缘增强处理,并显示边缘处理后的图像

figure
%采用’prewitt’算子:
prewittSample = uint8(filter2(fspecial(\'prewitt\'),sample));
subplot(211),imshow(prewittSample);
%采用’ sobel’算子:
sobelSample = uint8(filter2(fspecial(\'sobel\'),sample));
subplot(212),imshow(sobelSample);

 

(3)采用“原图*2-平滑图像”,以及“原图+边缘处理图像”的方法锐化图像

figure
%采用“原图*2-平滑图像”方法:
subSample = sample.*2 - uint8(mean7Sample);
subplot(211),imshow(subSample);
%采用“原图+边缘处理图像”方法
addSample = sample + uint8(prewittSample);
subplot(212),imshow(addSample);

 (4)imfilter 彩色图像的平滑

clear all;
I = imread(\'lena.jpg\');      %读取一张噪声图像 
%提取图像的三个(R、G、B)分量图像 
R = I(:,:,1); 
G = I(:,:,2); 
B = I(:,:,3); 
%生成一个8x8的均值滤波器 
w = fspecial(\'average\',8); 
fR = imfilter(R,w,\'replicate\'); 
fG = imfilter(G,w,\'replicate\'); 
fB = imfilter(B,w,\'replicate\'); 
fc_filtered = cat(3,fR,fG,fB);   %三分量平滑后合为一个整体
figure 
subplot(121); imshow(I);title(\'彩色噪声图像\');
subplot(122); imshow(fc_filtered);title(\'彩色图像平滑处理\'); 

clear all;
I = imread(\'lena.jpg\');      %读取一张噪声图像 
%提取图像的三个(R、G、B)分量图像 
R = I(:,:,1); 
G = I(:,:,2); 
B = I(:,:,3); 
%生成一个8x8的均值滤波器 
w = fspecial(\'average\',8); 
fc_filtered = imfilter(I, w, \'replicate\'); %不用rgb分量单独平滑,彩色图像的平滑函数
figure 
subplot(121); imshow(I);title(\'彩色噪声图像\');2
subplot(122); imshow(fc_filtered);title(\'彩色图像平滑处理\'); 

四、锐化处理

锐化本质是边缘增强,可以采用原图加边缘增强得到

(1)

clear all
A=imread(\'123.png\'); 
figure(1);
subplot(2,2,1);
imshow(A);
title(\'原图\');
 
I=double(A);
h=[-1 -1 -1;-1 9 -1;-1 -1 -1];
J=conv2(I,h,\'same\');
K=uint8(J);
subplot(2,2,2);
imshow(J);
title(\'使用拉普拉斯算子锐化处理后的图(double格式)\');
subplot(2,2,3);
imshow(K);
title(\'使用拉普拉斯算子锐化处理后的图(uint8格式)\');
L=(K+A)/2;
subplot(2,2,4);
imshow(L);
title(\'原图+锐化\');

 (2)

clear all
A=imread(\'123.png\'); 
figure(1);
subplot(3,2,1);
imshow(A);
title(\'原图\');

BW=edge(A,\'canny\');%黑白图
subplot(3,2,2);
imshow(BW);
title(\'candy算子边缘检测\');

K=uint8(BW);%转换格式,1白色
M=uint8(~K);%反转数值,1黑色
L_1=A-50*M;%黑色区域增强
subplot(3,2,3);
imshow(L_1);
title(\'黑色区域增强\');
L_2=(A+K*50);%白色区域增强
subplot(3,2,4);
imshow(L_2);
title(\'白色区域增强\');

L_3=A-50*M+50*K;
subplot(3,2,5);
imshow(L_3);
title(\'黑白都增强\');

(3)

clear all;
I=imread(\'lena.jpg\');
subplot(3,2,1),imshow(I);
xlabel(\'a)原始图像\');

H=fspecial(\'sobel\');%sobel滤波器
J=imfilter(I, H, \'replicate\');%灰度值
subplot(3,2,3),imshow(J);
xlabel(\'Sobel锐化滤波处理\');
K=I+0.32*J;%比例相加
subplot(324),imshow(K)
xlabel(\'Sobel锐化滤波处理+原图\');

H=fspecial(\'laplacian\');%laplacian滤波器
J=imfilter(I, H, \'replicate\');%灰度值
subplot(3,2,5),imshow(J);
xlabel(\'laplacian锐化滤波处理\');
K=I+J;%比例相加
subplot(326),imshow(K)
xlabel(\'laplacian锐化滤波处理+原图\');

滤波器决定了是锐化或者平滑

五、RGB和HSI

(1)直方图均衡

clear all
sourcePic=imread(\'lena.jpg\');  
[m,n,o]=size(sourcePic);  
grayPic=rgb2gray(sourcePic);%灰度图  
subplot(321),imshow(sourcePic); title(\'原图\')
subplot(323),imshow(grayPic); title(\'灰度图\')
  
gp=zeros(1,256); %计算各灰度出现的概率 (0,255)出现的概率 
for i=1:256  
    gp(i)=length(find(grayPic==(i-1)))/(m*n); %i灰度的概率
end  
subplot(324),,bar(0:255,gp);  
title(\'原图像直方图\');  
xlabel(\'灰度值\');  
ylabel(\'概率\');  
axis([0 256 0 0.02])  

newGp=zeros(1,256); %计算新的各灰度出现的概率  
S1=zeros(1,256);  
S2=zeros(1,256);  
tmp=0;  
for i=1:256  
    tmp=tmp+gp(i);  
    S1(i)=tmp;  %累计概率(映射到0~1)
    S2(i)=round(S1(i)*256); %映射到0~255 
end  
%映射
for i=1:256  
    newGp(i)=sum(gp(find(S2==(i-1)))); %灰度值为联系
end  
subplot(325),bar(0:255,newGp);  
title(\'均衡化后的直方图\');  
xlabel(\'灰度值\');  
ylabel(\'概率\');  
axis([0 256 0 0.02])  

newGrayPic=grayPic; %填充各像素点新的灰度值  
for i=1:256  
    newGrayPic(find(grayPic==(i-1)))=S2(i);  
end  
subplot(326),imshow(newGrayPic);  

clear all
sourcePic=imread(\'lena.jpg\');    
[m,n,o]=size(sourcePic);  
subplot(121),imshow(sourcePic);
title(\'原图\')
%% 
grayPic=sourcePic(:,:,1);   
gp=zeros(1,256); %计算各灰度出现的概率  
for i=1:256  
    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
end  
  
newGp=zeros(1,256); %计算新的各灰度出现的概率  
S1=zeros(1,256);  
S2=zeros(1,256);  
tmp=0;  
for i=1:256  
    tmp=tmp+gp(i);  
    S1(i)=tmp;  
    S2(i)=round(S1(i)*256);  
end  
for i=1:256  
    newGp(i)=sum(gp(find(S2==i)));  
end  
  
newGrayPic=grayPic; %填充各像素点新的灰度值  
for i=1:256  
    newGrayPic(find(grayPic==(i-1)))=S2(i);  
end  
nr=newGrayPic;  
 %%  
grayPic=sourcePic(:,:,2);  
  
gp=zeros(1,256); %计算各灰度出现的概率  
for i=1:256  
    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
end  
  
newGp=zeros(1,256); %计算新的各灰度出现的概率  
S1=zeros(1,256);  
S2=zeros(1,256);  
tmp=0;  
for i=1:256  
    tmp=tmp+gp(i);  
    S1(i)=tmp;  
    S2(i)=round(S1(i)*256);  
end  
for i=1:256  
    newGp(i)=sum(gp(find(S2==i)));  
end  
  
newGrayPic=grayPic; %填充各像素点新的灰度值  
for i=1:256  
    newGrayPic(find(grayPic==(i-1)))=S2(i);  
end  
ng=newGrayPic;  
%% 
grayPic=sourcePic(:,:,3);  
  
gp=zeros(1,256); %计算各灰度出现的概率  
for i=1:256  
    gp(i)=length(find(grayPic==(i-1)))/(m*n);  
end  
  
newGp=zeros(1,256); %计算新的各灰度出现的概率  
S1=zeros(1,256);  
S2=zeros(1,256);  
tmp=0;  
for i=1:256  
    tmp=tmp+gp(i);  
    S1(i)=tmp;  
    S2(i)=round(S1(i)*256);  
end  
for i=1:256  
    newGp(i)=sum(gp(find(S2==i)));  
end  
  
newGrayPic=grayPic; %填充各像素点新的灰度值  
for i=1:256  
    newGrayPic(find(grayPic==(i-1)))=S2(i);  
end  
nb=newGrayPic;  
%%  
res=cat(3,nr,ng,nb);  
subplot(122),imshow(res);  
title(\'均衡化后的图像\')

(2)hsi(色调、饱和度、亮度)hsv(色调(H),饱和度(S),明度(V))。

clear all
% hsi = rgb2hsi(rgb)把一幅RGB图像转换为HSI图像,
% 输入图像是一个彩色像素的M×N×3的数组,
% 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。
% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。
% 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。
%
% 输出HSI图像是double,
% 其中hsi(:, :, 1)是色度分量,它的范围是除以2*pi后的[0, 1];
% hsi(:, :, 2)是饱和度分量,范围是[0, 1];
% hsi(:, :, 3)是亮度分量,范围是[0, 1]。

% 抽取图像分量
rgb=imread(\'lena.jpg\');
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);

% 执行转换方程
num = 0.5*((r - g) + (r - b));
den = sqrt((r - g).^2 + (r - b).*(g - b));
theta = acos(num./(den + eps)); %防止除数为0

H = theta;
H(b > g) = 2*pi - H(b > g);
H = H/(2*pi);

num = min(min(r, g), b);
den = r + g + b;
den(den == 0) = eps; %防止除数为0

S = 1 - 3.* num./den;
H(S == 0) = 0;
I = (r + g + b)/3;

% 将3个分量联合成为一个HSI图像
hsi = cat(3, H, S, I);
subplot(121),imshow(hsi)
title(\'hsi图像\')

subplot(122),imshow(rgb2hsv(rgb))%自带函数 title(\'hsv图形\')

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
python4delphi 安装发布时间:2022-07-18
下一篇:
Delphi编程--视频捕获avicap32.pas源代码发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap