数字图像处理作业之MATLAB操作现象思考

来源:互联网 发布:cnc数控编程招聘 编辑:程序博客网 时间:2024/06/05 04:32

   通过对以下三个程序的实现,使我对MATLAB更为熟悉,且对图像的基本处理知识有更深的认识,有时候图像处理后的结果并不是认为可以想象到的,通过程序运行得到直观可见的结果一定有其必然性,下面我们就一起探索下小发现吧。

一、傅里叶变换及其逆变换

傅立叶变换(程序: fft_test.m) 

    将两幅 M×N 的灰度图像进行二维傅立叶变换,分别得到各自的幅度谱图像和相位谱图像,显示这4幅图像。将两幅图像的相位谱交换,进行反傅立叶变换,显示这两幅重建图像。

close all;clc;clear;% 读入原始图像img1 = imread('1.jpg');img2 = imread('2.jpg');I1 = rgb2gray(img1);    %得到灰度图像I2 = rgb2gray(img2);figure(1);imshow(I1);      %显示灰度图像title('图一的灰度图像');figure(2);imshow(I2);title('图二的灰度图像');% 求离散傅立叶频谱f_fft_1 = fftshift(fft2(I1));f_fft_2 = fftshift(fft2(I2));f_magnitude_1 = log(abs(f_fft_1));      %计算幅度谱,加log便于显示f_magnitude_2 = log(abs(f_fft_2));f_phase_1 = angle(f_fft_1);     %相位谱f_phase_2 = angle(f_fft_2);figure(3);subplot(2,2,1);imshow(f_magnitude_1,[]);    %显示幅度谱title('图一的幅度谱');subplot(2,2,2);imshow(f_phase_1,[]);        %显示相位谱title('图一的相位谱');subplot(2,2,3);imshow(f_magnitude_2,[]);    %显示幅度谱title('图二的幅度谱');subplot(2,2,4);imshow(f_phase_2,[]);        %显示相位谱title('图二的相位谱');%互换相位谱后进行傅里叶反变换f_phase_exp_1 = i.*f_phase_1;f_phase_exp_2 = i.*f_phase_2;f_phase_me_1 = abs(f_fft_1).*(exp(f_phase_exp_2));f_phase_me_2 = abs(f_fft_2).*(exp(f_phase_exp_1));f_ifft_1=real(ifft2(ifftshift(f_phase_me_1)));f_ifft_2=real(ifft2(ifftshift(f_phase_me_2)));figure(4);imshow(im2uint8(mat2gray(f_ifft_1)));title('图一幅度谱与图二相位谱的傅里叶反变换');figure(5);imshow(im2uint8(mat2gray(f_ifft_2)));title('图二幅度谱与图一相位谱的傅里叶反变换');
    这里贴上一组程序运行的结果图像,我使用的是600*450大小的图像进行实验。





       由于二维傅立叶变换矩阵Fn的原点默认设在左上角,所以图像经过二维傅立叶变换fft2后,图像信号能量将集中在系数矩阵的四个角上,这是由二维傅立叶变换本身性质决定的,图像四角是低频,最亮,说明低频的能量大。程序中使用fftshift进行原点平移之后使中间部分是低频,最亮,即将一、三象限交换,二、四象限交换。

         最终将两幅图像的相位谱进行交换后再傅里叶反变换,得到的结果图分别如下:



结果说明:从结果图中可看出原本的图一经过与图二的相位谱交换后,两幅图像均呈现出另一幅图像的结构轮廓,而局部的明暗几乎保持不变。这说明在双谱重构中,相位谱起了更大作用,相位谱包括了所有的边缘信息,而幅度谱反应的是平均灰度值,对于自然图像,相位包含了更多的视觉信息。

二、伪彩色处理

伪彩色处理:(程序:gray2color_test.m   gray2color.m)

        给定灰度-彩色转换函数,对一灰度图像进行伪彩色处理。转换函数如下表:

输入灰度级 0~31→淡黄色; 32~63→黄色; 64~95→橙色;96~127→红色; 128~159→紫色; 160~191→淡蓝色;192~223→绿色; 224~255→蓝色。

gray2color_test.m:

close all;clc;clear;image = imread('2.jpg');data = rgb2gray(image);img = gray2color(data);figure(1),imshow(uint8(image),[]);title('原彩色图像');figure(2),imshow(uint8(data),[]);title('原灰度图像');figure(3),imshow(uint8(img),[]);title('伪彩色图像');
gray2color.m

function img = gray2color(data)[x,y,z] = size(data);for i = 1:x    for j = 1:y        if data(i,j) >= 0  && data(i,j) <= 31 %浅黄色            img(i,j,1) = 255;            img(i,j,2) = 234;            img(i,j,3) = 180;        end        if data(i,j) >= 32 && data(i,j) <= 63 %黄色            img(i,j,1) = 247;            img(i,j,2) = 171;            img(i,j,3) = 0;        end        if data(i,j) >= 64 && data(i,j) <= 95  %橙色            img(i,j,1) = 234;            img(i,j,2) = 85;            img(i,j,3) = 32;        end        if data(i,j) >= 96 && data(i,j) <= 127 %红色            img(i,j,1) = 255;            img(i,j,2) = 0;            img(i,j,3) = 0;        end        if data(i,j) >= 128 && data(i,j) <= 159 %紫色            img(i,j,1) = 146;            img(i,j,2) = 61;            img(i,j,3) = 146;        end        if data(i,j) >= 160 && data(i,j) <= 191 %淡蓝色            img(i,j,1) = 177;            img(i,j,2) = 212;            img(i,j,3) = 219;        end        if data(i,j) >= 192 && data(i,j) <= 223 %绿色            img(i,j,1) = 0;            img(i,j,2) = 255;            img(i,j,3) = 0;        end        if data(i,j) >= 224 && data(i,j) <= 255 %蓝色            img(i,j,1) = 0;            img(i,j,2) = 0;            img(i,j,3) = 255;        end    endend

        在主函数中将彩色图像转为灰度图像之后,调用自己编写的gray2color函数即可实现将灰度图像转化为指定的伪彩色图像,其中gray2color函数中对应的颜色,可通过查表得到其在RGB各通道中的值,如下所示:

淡黄色:R:255  G:234  B:180

黄色:   R:247  G:171  B:0

橙色:   R:234  G:85   B:32

红色:   R:255  G:0    B:0

紫色:   R:146  G:61   B:146

淡蓝色:R:177  G:212  B:219

绿色:  R:0    G:255  B:0

蓝色:  R:0    G:0    B:255

        测试原彩色图像与伪彩色图像分别如下所示:


三、直方图均衡化及规定化   

直方图变换:(hist_test.m)

      绘制出一幅2M×2N 的灰度图像直方图;对该图像进行均衡化处理,绘制出均衡后图像的直方图;对该图像进行灰度变换,使变换后的图像大致具有如下图所示的归一化直方图,并绘制出变换后实际的直方图:


    均衡化处理后的图象只能是近似均匀分布。均衡化图象的动态范围扩大了,但其本质是扩大了量化间隔,而量化级别反而减少了,因此,原来灰度不同的象素经处理后可能变的相同,形成了一片的相同灰度的区域,各区域之间有明显的边界,从而出现了伪轮廓。如果原始图像对比度本来就很高,再均衡化则灰度调和,对比度降低;在泛白缓和的图像中,均衡化会合并一些象素灰度,从而增大对比度。均衡化后的图片如果再对其均衡化,则图像不会有任何变化。

     灰度直方图均衡化的算法,简单地说,就是把直方图的每个灰度级进行归一化处理,求每种灰度的累积分布,得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。其具体的数学描述可参看网上的其它资料,这里直接调用MATLAB中的直方图均衡化函数来实现。而生成具有指定直方图的图像的方法称为直方图匹配或直方图规定化。以下给出MATLAB参考程序,有兴趣者可将直方图均衡化及直方图规定化部分用自己编写的函数来实现。

clear;close all;img=imread('5.jpg');%读取图像data=rgb2gray(img);   %转化为灰度图像 % figure;imshow(b);   %显示原图data_equal=histeq(data);  %直方图均衡化% figure;imshow(c);% 直方图规定化for i=1:256    for j=1:128        data_model(j)=255-2*(j-1);        data_model(257-j)=data_model(j);    endendimg_out=histeq(data,data_model);figure;subplot(2,2,1);imhist(data);title('原图的灰度直方图');   %显示原图的灰度直方图subplot(2,2,2);imhist(data_equal);title('均衡化后图像的灰度直方图');    %显示均衡化后图像的灰度直方图subplot(2,2,3);stem(data_model);title('规定化函数');%输出规定化函数subplot(2,2,4);imhist(img_out);title('直方图规定化后的图像灰度直方图');%直方图规定化后的图像灰度直方图figure;imshow(data_equal);title('直方图均衡化后的灰度图像');    %直方图均衡化后的灰度图像figure;imshow(img_out);title('直方图规定化后的灰度图像');%直方图规定化后的灰度图像

       结果如下:




※实验结果说明:如果原始图像对比度本来就很高,如果再均衡化则灰度调和,对比度降低。在泛白缓和的图像中,由于均衡化过程中会合并一些象素灰度,则会增大对比度,这里255灰度级太多,合并不明显。题中所给的规定直方图的函数其对比度极高,所以得出的最终经过直方图规定化后的灰度图像其明暗对比度也很高,所有西安古寺的灰度值基本都位于0或255附近,通过其输出规定化后直方图可明显看出。

这是数字图像处理的小作业,希望能够对你熟练运用matlab有所帮助,也期待你和我一起进步。




         







0 0
原创粉丝点击