function varargout = main(varargin)
% MAIN MATLAB code for main.fig
% MAIN, by itself, creates a new MAIN or raises the existing
% singleton*.
%
% H = MAIN returns the handle to a new MAIN or the handle to
% the existing singleton*.
%
% MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MAIN.M with the given input arguments.
%
% MAIN('Property','Value',...) creates a new MAIN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before main_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to main_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help main
% Last Modified by GUIDE v2.5 08-Jun-2019 10:47:19
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @main_OpeningFcn, ...
'gui_OutputFcn', @main_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
% End initialization code - DO NOT EDIT
% --- Executes just before main is made visible.
function main_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to main (see VARARGIN)
% Choose default command line output for main
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes main wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = main_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton_open.
function pushbutton_open_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_open (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%打开
[fn,pn,fi]= uigetfile({'*.jpg';'*.png';'*.gif';'*.bmp';'*.TIFF'},'FileSelector');
img=imread([pn fn]);
setImg(img);
axes(handles.axes1);%设置坐标位置
imshow(img);%显示图像
setSaveImg(img);%保存图像
setName(0);%设置名称
% --- Executes on button press in pushbutton_msk.
function pushbutton_msk_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_msk (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%图片加马赛克练习
%均值处理方式加马赛克
%参数说明:f表示原图;fr,fg,fb表示原图的RGB三个通道
%imgn表示新图像
%imgnr,imgng,imgnb表示新图像的三个通道,分别用于存储新的图像
%n*n表示设置的马赛克区域像素块的大小
f = getImg;
%将源图像三个通道值取出
fr = f(:,:,1);
fg = f(:,:,2);
fb = f(:,:,3);
%由于原图像是三维h*w*3,求出单通道图像的大小
[h w] = size(fr);
%设置三个零矩阵用于存储新图像
imgnr = zeros(h,w);
imgng = zeros(h,w);
imgnb = zeros(h,w);
%设置马赛克区域n*n像素块大小
n = 10;
nh = floor(h/n)*n;%将不一定是n的整数倍的图像大小化为整数倍
nw = floor(w/n)*n;
%对R通道进行处理
for j = 1:n:nh
for i = 1:n:nw
imgnr(j:j+n-1, i:i+n-1) =mean(mean(fr(j:j+n-1, i:i+n-1)));%对列进行取均值处理
end
imgnr(j:j+n-1,nw:w ) = mean(mean(fr(j:j+n-1,nw:w )));%处理最后的列
end
for i = 1:n:nw
imgnr(nh:h, i:i+n-1) = mean(mean(fr(nh:h, i:i+n-1)));%处理最后的行
end
imgnr(nh:h, nw:w) = mean(mean(fr(nh:h, nw:w)));%处理最后的角
%处理G通道
for j = 1:n:nh
for i = 1:n:nw
imgng(j:j+n-1, i:i+n-1) =mean(mean(fg(j:j+n-1, i:i+n-1)));
end
imgng(j:j+n-1, nw:w) = mean(mean(fg(j:j+n-1, nw:w)));
end
for i = 1:n:nw
imgng(nh:h, i:i+n-1) = mean(mean(fg(nh:h, i:i+n-1)));
end
imgng(nh:h, nw:w) = mean(mean(fg(nh:h, nw:w)));
%处理B通道
for j = 1:n:nh
for i = 1:n:nw
imgnb(j:j+n-1, i:i+n-1) = mean(mean(fb(j:j+n-1, i:i+n-1)));
end
imgnb(j:j+n-1, nw:w) = mean(mean(fb(j:j+n-1, nw:w)));
end
for i = 1:n:nw
imgnb(nh:h,i:i+n-1) = mean(mean(fb(nh:h, i:i+n-1)));
end
imgnb(nh:h, nw:w) = mean(mean(fb(nh:h, nw:w)));
%三通道图像合成
imgnr = im2double(imgnr)/255;
imgng = im2double(imgng)/255;
imgnb = im2double(imgnb)/255;
imgn = cat(3,imgnr, imgng, imgnb);
axes(handles.axes2);
setSaveImg(imgn);
setName(1);
imshow(imgn);
%设置全局变量的原图像值
function setImg(var)
global xa
xa=var;
%获取全局变量的原图像值
function re=getImg
global xa
re=xa;
%设置全局变量的效果图值
function setSaveImg(var)
global aa
aa=var;
%获取全局变量的效果图值
function bk=getSaveImg
global aa
bk=aa;
%设置全局变量的图片名称值
function setName(var)
global ca
ca=var;
%获取全局变量的图片名称值
function kk=getName
global ca
kk=ca;
% --- Executes on button press in pushbutton_fugu.
function pushbutton_fugu_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_fugu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%复古照片
Image = getImg;
Image=double(Image);%将图像转为二进制
Image_new=Image;
%将图片的红、绿、蓝三种分量重新设置,其值为:0.393*红+0.769*绿+0.189*蓝,从而达到复古的效果
Image_new(:,:,1)=0.393*Image(:,:,1)+0.769*Image(:,:,2)+0.189*Image(:,:,3);
Image_new(:,:,2)=0.349*Image(:,:,1)+0.686*Image(:,:,2)+0.168*Image(:,:,3);
Image_new(:,:,3)=0.272*Image(:,:,1)+0.534*Image(:,:,2)+0.131*Image(:,:,3);
%将图像矩阵转化到0-1之间,若图像>1时将呈现白色
axes(handles.axes2);
setSaveImg(Image_new/255);
setName(2);
imshow(Image_new/255);
% --- Executes on button press in pushbutton_dipian.
function pushbutton_dipian_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_dipian (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%底片
img = getImg;
img_out = 255 - img;
axes(handles.axes2);
setSaveImg(img_out);
setName(3);
imshow(img_out);
% --- Executes on button press in pushbutton_sumiao.
function pushbutton_sumiao_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_sumiao (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%素描
I=getImg;
info_size=size(I);
height=info_size(1);
width=info_size(2);
N=zeros(height,width); %取反之后值
G=zeros(height,width); %滤波之后值
%三通道
rc = I(:,:,1);
gc = I(:,:,2);
bc = I(:,:,3);
%选择一个通道进行处理
channel = gc;
out=zeros(height,width);
spec=zeros(height,width,3);
%颜色取反
for i=1:height
for j=1:width
N(i,j)=uint8(255-channel(i,j)); %double
end
end
%高斯模糊
gausize = 9; %滤波器大小,越大越模糊
gausigma = 10; %越大越模糊
GH = fspecial('gaussian', gausize, gausigma);
G = imfilter(N, GH);
for i=1:height
for j=1:width
b=double(G(i,j));
a=double(channel(i,j));
temp=a+a*b/(256-b);
out(i,j)=uint8(min(temp,255));
end
end
axes(handles.axes2);
评论0
最新资源