基于Matlab实现的图像特效处理毕业设计

数字图像是指由被称作象素的小块区域组成的二维矩阵。将一幅二维的图像通过有限个离散点来表示就成为了数字图像,其中的每个点称为图像元素,即像素。像素值往往用来表示像素的灰度级、颜色、高度值、透明度等等。

对于单色及灰度图像的处理,可以采用每一个像素的高度值来一一表示该像素点的数值,通常它的数值范围大约在0~255内,即可用一个Byte来表示出来,当然在此范围内0表示黑,255表示白,而其他的就是灰度了,例如图2.1所示可见到关于灰度图像及其对应的矩阵。

2.1  灰度图像及其对应的矩阵

在数字图像处理过程中,图像可用红,绿,蓝三个元组进行二维矩阵来表示其范围值,通常可以用三元组来表示第个数值的大小,其范围在0~255内,当然0就表示没有一个基色像素值。而255则表示图像其相应的基色在图像中像素的最大值,在这些情况下,可以看出以下的数据,清晰明了的看出三个字节表示。根据其他所要求的数据可以用其数据直观的看出问题。如图2.2所示:

2.2  彩色图像及其对应的矩阵

数字图像是对二维连续光函数进行等距离矩形网格采样,再对幅度进行等间隔量化得到的二维数据矩阵。采样是测量每个象素值而量化是将该值数字化的过程。

数字图像在本质上是二维信号,因此信号处理(以一维信号为对象展开的课程)中的基本技术(如FFT)可以用在数字图像处理中。但是,由于数字图像只是一种非常特殊的二维信号,反映场景的视觉属性,只是二维连续信号的非常稀疏的采样,希望从单个或少量采样中获得有意义的描述或特征,无法照搬一维信号处理的方法,需要专门的技术。实际上数字图像处理更多地依赖于具体应用问题,是一系列的特殊技术的汇集,缺乏贯穿始终的严格的理论体系。

数字图像处理是一个多学科交叉的领域,涉及光学、电子学、数学、摄影技术、计算机技术等众多学科,是一个高度综合的技术学科。

对图像进行处理(或加工、分析)的主要目的有三个方面:

(1)为了提高图像的视感及质量,将进行一些图像的高度,彩色变换及增强等要素,对图像进行了一些几何的变换等等,方便提高图像的质量。

(2)在提取图像的过程中,需要一些特性及提取的信息为分析图像提供大量的方便。在模式识别中便于操作。它包括多个方面的要素,例如频域特性,灰度及颜色、边界、区域、纹理、形状及关系等等特性,

  (3)在大量的图像的变换及编码和压缩等技术中,为了方便图像的存储及传输。无论是哪种图像的处理或是加工,都需采用计算机与图像专用设备来完成图像处理对图像数据进行一些必要的加工处理等等。

数字图像处理主要研究的内容有以下几个方面:

 1) 在图像变换中,由于图像矩阵函数很庞大,需要在空间域中进行大量的处理,这些内容涉及计算量相当大。因此,通常采用的图像变换的方法有傅立叶、沃尔什、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,可减少计算量也可获得更有效的处理。

  2) 在图像编码压缩技术中,可减少描述图像的数据量(即Bit数),即可节省图像传输、处理时间和减少所占用的存储器容量。而图像压缩技术可以在不失真的前提下获得相应的要求,也可以在允许失真的条件下进行图像处理。图像编码技术是图像压缩技术中最重要的方法之一,它在图像处理技术中是发展最早且比较成熟的一门编码技术。

  3) 图像的增强和复原目的是为了达到图像的质量,例如去除,提高图像的清晰度等等。图像增强不考虑图像降低质量的原因,突出图像中所需求的部分。如强化边缘的设置,可使图像中物体轮廓边缘更加清晰可见,细节明显;如强化低频分量可减少图像中噪声影响。图像复原要求对图像降质(降低质量)的原因有一定的了解,一般需要根据降质过程建立"降质模型",再采用某种滤波方法,恢复或重建技术来还原各种图像达到所需要目的。

  4)图像分割技术是数字图像处理中的重要技术之一。图像分割技术是将图像中有意义的部分提取出来,其中有意义的特征包括图像中的边缘、区域等,它是进一步进行图像识别、分析和理解的必要之处。目前已研究出不少关于边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效的方法。因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热门话题之一。

  5)图像描述是图像识别和理解的必要前提之一。作为最简单的二维图像可采用其几何特性描述物体的技术,一般图像的描述方法可采用其二维图像形状描述,它有边界描述和区域描述两类技术。对于特殊的纹理图像可采用二维纹理特征描述。随着图像处理研究的深入发展,已经开始进行三维物体描述的研究,提出了体积、表面、广义圆柱体描述等方法来研究。

6)图像分类(识别)属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)技术后,进行图像分割及特征提取的方法,从而进行一些判决分类。图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类,近年来新发展起来的模糊识别和人工神经网络模式分类在图像识别中也越来越受到广大编程人员的重视。

 

  1. 色调调整adjust亮度处理brightness

function varargout = brightness_dlg(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name',       mfilename, ...

                   'gui_Singleton',  gui_Singleton, ...

                   'gui_OpeningFcn', @brightness_dlg_OpeningFcn, ...

                   'gui_OutputFcn',  @brightness_dlg_OutputFcn, ...

                   'gui_LayoutFcn',  [] , ...

                   'gui_Callback',   []);

if nargin && ischar(varargin{1})

    gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

    gui_mainfcn(gui_State, varargin{:});

end

function brightness_dlg_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

setappdata(0, 'brightness_slider', 0);

handles.image = getappdata(0,'process_image');

guidata(hObject, handles);

function varargout = brightness_dlg_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function brighterness_slider_Callback(hObject, eventdata, handles)

gUpdateBrightnessAxes = getappdata(0, 'update_brightness_axes');

bgt_degree = get(hObject,'Value');

setappdata(0, 'brightness_slider', bgt_degree);

bgt_degree = round(255 * bgt_degree);

set(handles.brightness_edit, 'String', num2str(bgt_degree));

feval(gUpdateBrightnessAxes);

function brighterness_slider_CreateFcn(hObject, eventdata, handles)

usewhitebg = 1;

if usewhitebg

    set(hObject,'BackgroundColor',[.9 .9 .9]);

else

    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function brightness_edit_Callback(hObject, eventdata, handles)

if ispc

    set(hObject,'BackgroundColor','white');

else

    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));

end

function sure_pushbutton_Callback(hObject, eventdata, handles)

image = getappdata(0, 'process_image');

setappdata(0,'origin_image',image);

delete(handles.figure1);

function cancel_pushbutton_Callback(hObject, eventdata, handles)

setappdata(0, 'process_image', handles.image);

show_origin_image;

delete(handles.figure1);

  1. blur模糊

function out = gauss_blur_process(image_in)

image = image_in;

m = [1 2 1;2 4 2;1 2 1] / 16;

image = myImfilter3_3(image, m);

out = image;

function out = myImfilter3_3(image_in, matrix3_3)

image = image_in;

m = matrix3_3;

[h,w,z] = size(image);

hr = h + 2;

wr = w + 2;

replicate_image = ones(hr,wr,3);

for i = 2:1:hr - 1

    for j = 2:1:wr - 1

        replicate_image(i,j,:) = image(i-1,j-1,:);

    end

end

replicate_image(1,2:1:wr - 1,:) = image(1,:,:);

replicate_image(hr,2:1:wr - 1,:) = image(h,:,:);

replicate_image(2:1:hr - 1,1,:) = image(:,1,:);

replicate_image(2:1:hr - 1,wr,:) = image(:,w,:);

for i = 2:1:hr - 1

    for j = 2:1:wr - 1

        for z = 1:1:3

            pixel = replicate_image(i-1,j-1,z) * m(1,1) + replicate_image(i-1,j,z) * m(1,2) + replicate_image(i-1,j+1,z) * m(1,3) + ...

                    replicate_image(i,j-1,z) * m(2,1) + replicate_image(i, j, z) * m(2,2) + replicate_image(i, j+1, z) * m(2,3) + ...

                    replicate_image(i+1,j-1,z) * m(3,1) + replicate_image(i+1,j,z) * m(3,2) + replicate_image(i+1,j+1,z) * m(3,3);

            image_new(i-1,j-1,z) = pixel;

            %disp(pixel);

        End    end

end

image_new = max(0, image_new);

image_new = min(1, image_new);

out = image_new;

3.扭曲

function out = moire_fringe_process(image_in, degree_in)

image = image_in;

degree = degree_in;

[h,w,z] = size(image);

image_new = ones(h,w,z);

midx = w / 2;

midy = h / 2;

for i=1:1:h

    for j=1:1:w

      offsetX = j - midx;

       offsetY = i - midy;

       radian = atan2(offsetY, offsetX);

       radius = sqrt(offsetX * offsetX + offsetY * offsetY);

       X = round(radius * sin(radian + degree * radius));

       Y = round(radius * sin(radian + degree * radius));

       X = max(1,X); X = min(w,X);

       Y = max(1,Y); Y = min(h,Y);

      image_new(i,j,:) = image(Y,X,:);

    end

end

image_new = image + 0.5*image_new;

max(image_new,0);   min(1,image_new);

out = image_new;

4. emboss浮雕

function out = color_emboss_process(image_in, angle_in)

image = image_in;

angle = angle_in * pi / 180;

pi_quarter = pi / 4;

topleft = cos(angle + pi_quarter);

topright = cos(angle + 3* pi_quarter);

midleft = cos(angle);

center = 1;

midright = cos(angle + 4* pi_quarter);

bottomleft = cos(angle - pi_quarter);

bottommid = cos(angle - 2 * pi_quarter);

bottomright = cos(angle - 3 * pi_quarter);

m = [topleft topmid topright;midleft center midright;bottomleft bottommid bottomright];

image = myImfilter3_3(image, m); %image = image + 0.2;

image = max(0, image);

image = min(1, image);

out = image;

5. rotate旋转

function out = transpose_process(image_in)

image = image_in;

[h,w,z] = size(image);

image_new = ones(w,h,3);

for i = 1:1:h

    for j = 1:1:w

       image_new(j,i,:) = image(i,j,:);

    end

end

out = image_new;

6noise噪声

function out = noise_salt_process(image_in, probability_in)

%probability_in [0, 100]

image = image_in;

probability = probability_in / 100;

[h,w,z] = size(image);

image_new = image;

for i=1:1:h

    for j=1:1:w

        if rand < probability

            image_new(i,j,1) = rand;

            image_new(i,j,2) = rand;

            image_new(i,j,3) = rand;

        end

    end

end

image_new = max(0, image_new);

image_new = min(1, image_new);

out = image_new;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值