计算机图像处理实验报告哈哈哈哈哈哈实验台31 1.应用MATLAB语言编写显示一幅灰度图像、二值图像、索引图像及彩色图像的程序,并进行相互之间的转换1)彩色图像转换为灰度图像、索引图像、二值图像A=imread('F:\colorful.jpg');subplot(221);imshow(A);title('彩色图像');I1=rgb2gray(A);subplot(222);imshow(I1);title('灰度图像');[X1,map]=rgb2ind(A,256);subplot(223);imshow(X1);title('索引图像');BW=im2bw(A);subplot(224);imshow(BW);title('二值图像');彩色图像灰度图像索引图像二值图像2)灰度图像转换为索引图像、二值图像clearA=imread('F:\colorful.jpg');B=rgb2gray(A);subplot(131);imshow(B);title('灰度图像');[X2,map]=gray2ind(B,128);subplot(132);imshow(X2);title('索引图像');BW2=im2bw(B);subplot(133);imshow(BW2);title('二值图像');灰度图像索引图像二值图像3)索引图像转为灰度图像、二值图像、彩色图像clearA=imread('F:\colorful.jpg');[X,map]=rgb2ind(A,256);subplot(221);imshow(X);title('索引图像');I3=ind2gray(X,map);subplot(222);imshow(I3);title('灰度图像');BW3=im2bw(X,map,0.5);subplot(223);imshow(BW3);title('二值图像');RGB=ind2rgb(X,map);subplot(24);imshow(RGB);title('还原彩色图像');索引图像灰度图像二值图像还原彩色图像2.应用MATLAB工具箱演示一幅图像的傅里叶变换、离散余弦变换,观察其频谱图。
然后将它们进行逆变换,观察逆变换后的图像1)傅里叶及其逆变换A=imread('F:\colorful.jpg');B=rgb2gray(A);subplot(131);imshow(B);title('灰度图像');F=fft2(B);subplot(132);imshow(log(abs(F)),[]);title('傅里叶变换频谱');subplot(133);imshow(uint8(ifft2(F)));title('傅里叶逆变换');灰度图像傅里叶变换频谱傅里叶逆变换2)离散余弦变换及其逆变换A=imread('F:\colorful.jpg');B=rgb2gray(A);figure,subplot(131);imshow(B);title('灰度图像');D=dct2(B);subplot(132);imshow(D);title('离散余弦变换频谱');subplot(133);imshow(uint8(idct2(D)));title('逆离散余弦变换');灰度图像离散余弦变换频谱逆离散余弦变换3.应用MATLAB 语言编程来实现一幅图像的增强。
1)取一幅灰度图像,对其进行线性点运算,即)(βα+==A A B G G f G 取(α,β)分别为(1.5,1.2)、(0.7,1.2),对原图像进行线性处理,观察处理后的结果,并分析直方图的变化。
clearA=imread('F:\colorful.jpg');I=rgb2gray(A);B=1.5*I+1.2;B2=0.7*I+1.2;subplot(321);imshow(I);title('灰度图像');subplot(322);imhist(I);title('原直方图');subplot(323);imshow(B);title('线性变换后图像1');subplot(324);imhist(B);title('线性变换后直方图1');subplot(325);imshow(B2);title('线性变换后图像2');subplot(326);imhist(B2);title('线性变换后直方图2');灰度图像原直方图100200线性变换后图像1线性变换后直方图1100200线性变换后图像20线性变换后直方图2100200α=1.5时,图像更加明亮,对比度提高,直方图集中于灰度值较高部分; α=0.7时,图像更加暗淡,对比度降低,直方图集中于灰度值较低部分;2)取一幅灰度图像,对其进行直方图均衡化处理,再对其进行规定化处理,并对结果进行分析。
clearA=imread('F:\colorful.jpg');I=rgb2gray(A);subplot(321);imshow(I);title('灰度图像');subplot(322);imhist(I);title('原直方图');I1=histeq(I);subplot(323);imshow(I1);title('直方图均衡化后图像');subplot(324);imhist(I1);title('均衡化直方图');for i=1:4:256m(i)=i;endI2=histeq(I,m);subplot(325);imshow(I2);title('直方图规定化后图像');subplot(326);imhist(I2);title('规定化直方图');灰度图像原直方图100200直方图均衡化后图像均衡化直方图100200直方图规定化后图像0规定化直方图0100200直方图均衡化使直方图在整个灰度级动态范围内近似分布,以实现对比度的增强。
同时,变换后图像的灰度级减少,某些细节消失。
直方图规定化通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。
有选择地增强某个灰度值范围内的对比度。
思考题:如果将一幅图像进行一次直方图均衡化处理后,再进行一次直方图均衡化处理,结果会发生变化吗?观察两次均衡化的直方图是否一样。
clearA=imread('F:\colorful.jpg');I=rgb2gray(A);subplot(321);imshow(I);title('灰度图像');subplot(322);imhist(I);title('原直方图');I1=histeq(I);subplot(323);imshow(I1);title('第一次均衡化');subplot(324);imhist(I1);title('第一次均衡化');I2=histeq(I1);subplot(325);imshow(I2);title('第二次均衡化');subplot(326);imhist(I2);title('第二次均衡化');if I2-I1==0disp('两次结果相同');else disp('两次结果不同');end>>tuxiangtest两次结果相同灰度图像0原直方图100200第一次均衡化0第一次均衡化100200第二次均衡化0第二次均衡化0100200分析:直方图均衡化所用的变换函数为原始直方图的累积直方图,均衡化后得到的增强图像的累积直方图与原始图像的累积直方图相同。
如果再次均衡化,所用的变换函数即为均衡化后得到的增强图像的累积直方图。
故两次均衡化结果相同。
3)取一幅灰度图像,加入噪声后对其进行平滑滤波(均值滤波、中值滤波),并观察不同滤波方式下的效果。
clearA=imread('F:\colorful.jpg');I=rgb2gray(A);Noise=imnoise(I,'salt&pepper',0.06);subplot(221);imshow(I);title('原图像');subplot(222);imshow(Noise);title('加椒盐噪声图像');f=filter2(fspecial('average',3),Noise);%模板均值滤波subplot(223);imshow(uint8(f));title('均值滤波后图像');f2=medfilt2(Noise,[33]);subplot(224);imshow(f2);title('中值滤波后图像');原图像加椒盐噪声图像均值滤波后图像中值滤波后图像Noise2=imnoise(I,'gaussian',0,0.01);subplot(221);imshow(I);title('原图像');subplot(222);imshow(Noise2);title('加高斯噪声图像');f3=filter2(fspecial('average',4),Noise2);%模板均值滤波subplot(223);imshow(uint8(f3));title('均值滤波后图像');f4=medfilt2(Noise2,[44]);subplot(224);imshow(f4);title('中值滤波后图像');原图像加高斯噪声图像均值滤波后图像中值滤波后图像均值滤波,采用邻域平均法,选择模板的均值作为当前灰度值,对高斯噪声效果明显。
中值滤波,选择邻域中灰度值的中间值作为当前灰度值,对椒盐噪声效果显著。
4)取一幅灰度图像,采用不同的算子对其进行边缘锐化,并分析结果。
clearA=imread('F:\colorful.jpg');I=rgb2gray(A);h1=fspecial('sobel');f1=filter2(h1,I);h2=fspecial('prewitt');f2=filter2(h2,I);h3=fspecial('laplacian');f3=filter2(h3,I);subplot(221);imshow(I,[]);title('原始图像');subplot(222);imshow(f1,[]);title('sobel算子');subplot(223);imshow(f2,[]);title('prewitt算子');subplot(224);imshow(f3,[]);title('laplacian算子');原始图像sobel算子prewitt算子laplacian算子Prewitt算子利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘。