f0=0;g0=0; f1=100;g1=60; f2=150;g2=220; f3=255;g3=255;
figure,plot([f0,f1,f2,f3],[g0,g1,g2,g3]) axis tight,xlabel('f'),ylabel('g') title('intensity transformation') r1=(g1-g0)/(f1-f0); b1=g0-r1*f0;
r2=(g2-g1)/(f2-f1); b2=g1-r2*f1;
r3=(g3-g2)/(f3-f2); b3=g2-r3*f2; [m,n]=size(in1); in2=double(in1); for i=1:m for j=1:n f=in2(i,j); g(i,j)=0;
if (f>=0)&(f<=f1) g(i,j)=r1*f+b1;
elseif (f>=f1)&(f<=f2) g(i,j)=r2*f+b2;
elseif (f>=f2)&(f<=f3) g(i,j)=r3*f+b3; end end end
figure,subplot(121),imshow(in1) subplot(122),imshow(mat2gray(g))
3、 clc,clear,close all
in=imread('pout.tif'); [m,n]=size(in);
num=zeros(1,256); % num 是每个灰度级对应的像素个数 p=zeros(1,256); % p 是每个灰度级出现的概率 for i=1:m for j=1:n
num(1,in(i,j)+1)=num(1,in(i,j)+1)+1;% 统计个数 end end
p=num./(m*n)% 求概率 x=1:256;
subplot(121),plot(x,p) ,axis([1 256 0 0.06]) subplot(122),imhist(in)
实验四 图像空域变换增强(2)
一、实验目的
1、掌握直方图均衡化算法。
2、巩固灰度变换、直方图修正、图像算术和逻辑运算等基础知识。
3、熟练掌握空域变换增强的matlab 相关函数用法,并能利用算法自己编写matlab 程序实现图像空域变换增强。 实现频域线性变换,非线性变换增强
二、实验内容
1、利用直方图均衡化算法对图像pout.tif 进行增强运算。 2、对图像lena.jpg 作逻辑与和逻辑或运算。
三、实验原理
j=imcomplement(i);对图像取反 imhist();显示图像的直方图 histeq();直方图均衡化函数
imnoise(I,type,parameters);给图像加噪声 bitand();图像位与运算 bitor();图像位或运算
四、实验代码与结果
1、 clear; close all; clc;
tu=imread('pout.tif'); % 输入图像
%tu=rgb2gray(tu); % 转换为灰度图像
N=zeros(1,256); % N 为原始图像各灰度级像素个数 P=zeros(1,256); % P 为原始成图像直方图
q=zeros(1,256); % q 为原始图像直方图累积分布函数
newN=zeros(1,256); % newN 为新生成图像各灰度级像素个数 newP=zeros(1,256); % newP 为新生成图像直方图
newq=zeros(1,256); % newq 为新生成图像直方图累积分布函数 [h w]=size(tu);
new_tu=zeros(h,w);
% 计算原始图像各灰度级像素个数 for x=1:h for y=1:w
N(1,tu(x,y))=N(1,tu(x,y))+1; end end
P=N./sum(N);% 计算原始直方图 P % 计算原始累积分布直方图 q(1,1)=P(1,1); for i=2:256
q(1,i)=q(1,i-1)+P(1,i); end
% 计算原始直方图对应的新的灰度 t?? ,建立映射关系 for i=1:256
t(1,i)=floor(254*q(1,i)+1+0.5); end
% 计算直方图均衡化后的新图 new_tu for x=1:h for y=1:w
new_tu(x,y)=t(1,tu(x,y)); end end
% 统计新生成图像各灰度级像素个数 for x=1:h for y=1:w
newN(1,new_tu(x,y))=newN(1,new_tu(x,y))+1; end end
newP=newN./(h*w);% 计算新的灰度直方图 newP % 计算新生成图像累积分布直方图 newq(1,1)=newP(1,1); for i=2:256
newq(1,i)=newq(1,i-1)+newP(1,i); end
% 显示信息
subplot(231),imshow(tu)
subplot(232),plot(P),axis([1 256 0 0.06]) subplot(233),plot(q),axis([1 256 0 1]) subplot(234),imshow(new_tu,[])
subplot(235),plot(newP),axis([1 256 0 0.06]) subplot(236),plot(newq),axis([1 256 0
1])
2、 clc,clear,close all
in=imread('lena.jpg'); in=rgb2gray(in); [m,n]=size(in); in=double(in);
out1=ones(m,n)*255;out1(20:150,30:170)=0; chu1=zeros(m,n);chu1(20:150,30:170)=255; for i=1:m for j=1:n
out2(i,j)=bitor(in(i,j),out1(i,j)); chu2(i,j)=bitand(in(i,j),chu1(i,j)); end end
in=uint8(in);out1=uint8(out1);out2=uint8(out2); chu1=uint8(chu1);chu2=uint8(chu2); subplot(231),imshow(in) subplot(232),imshow(out1) subplot(233),imshow(out2) subplot(234),imshow(chu1) subplot(235),imshow(chu2)