投影,在立体几何中我们学到过,是空间直线在某个方向上的投影,那么图像处理中也是这种投影思想。
最简单的投影:
水平方向投影,将图像数组进行列求和;
垂直方向投影,将图像数组进行行求和;
对于二值图像或明显特征的灰度图分割前景与背景,经常用到投影法。
unction varargout = chongjian(varargin) % CHONGJIAN MATLAB code for chongjian.fig % CHONGJIAN, by itself, creates a new CHONGJIAN or raises the existing % singleton*. % % H = CHONGJIAN returns the handle to a new CHONGJIAN or the handle to % the existing singleton*. % % CHONGJIAN('CALLBACK',hObject,eventData,handles,...) calls the local % function named CALLBACK in CHONGJIAN.M with the given input arguments. % % CHONGJIAN('Property','Value',...) creates a new CHONGJIAN or raises the % existing singleton*. Starting from the left, property value pairs are % applied to the GUI before chongjian_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application % stop. All inputs are passed to chongjian_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 chongjian % Last Modified by GUIDE v2.5 22-Mar-2020 18:21:37 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @chongjian_OpeningFcn, ... 'gui_OutputFcn', @chongjian_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 chongjian is made visible. function chongjian_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 chongjian (see VARARGIN) axes(handles.axes1); imshow([255]); axes(handles.axes2); imshow([255]); axes(handles.axes3); imshow([255]); % Choose default command line output for chongjian handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes chongjian wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = chongjian_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 pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) global tu axes(handles.axes1) [filename,pathname]=uigetfile({ ... '*.*','All Files(*.*)';},... '选择文件'); % if isequal([filename,pathname],[0,0]) return else %读取图片 pic = fullfile(pathname,filename); b = imread(pic); imshow(b);%上面是打开图片的步骤,这一句是显示图片 tu=b; title('原始图像'); %handle.axes1=b; end % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton2. function pushbutton2_Callback(hObject, eventdata, handles) global tu global tu2 P = tu; [N,N]=size(P); %先进行自定义radon变换------------------------------------------------------------ thm=45; %45度时会出现最大尺寸 pre = imrotate(P,thm); [mmax,nmax] = size(pre); s=1; %创建一个180*nmax的空白图片,用以存储投影后的线状图片 Final = zeros(180/s,nmax);%这里180代表180角度,每个角度投影成为一条线 t = 1; for theta = 1:s:179 Protate = imrotate(P,theta); %对原图旋转一个角度,求和(线积分) Pf = sum(Protate,1); [mreal,nreal]=size(Pf); %计算实际尺寸 %确定起始点 if (nmax - nreal)/2-floor((nmax - nreal)/2) == 0 From = floor((nmax - nreal)/2 + 1);%总点数为偶数时 else From = floor((nmax - nreal)/2) + 1;%总点数为奇数时 end %结果文本显示------------------------------------------------------------ % o=ones(500,1000); % subplot(2,3,6); % imshow(o,[]); % s_title=['图像重建精度判据如下:']; % text(0,0,s_title,'Fontsize',14); % s=num2str(toc); % s_one=['run time = ' s ' s;']; % text(0,100,s_one,'FontSize',10); % s=num2str(evaluate_d); % s_two=['归一化均方距离判据d=' s ';']; % text(0,200,s_two,'Fontsize',10); % s=num2str(evaluate_r); % s_three=['归一化平均绝对距离判据r=' s ';']; % text(0,300,s_three,'Fontsize',10); % s=num2str(evaluate_e); % s_four=['最坏情况距离判据e=' s ';']; % text(0,400,s_four,'Fontsize',10); % toc % hObject handle to pushbutton2 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) global tu2 axes(handles.axes3); imshow(tu2); title('投影重建后的图像'); % hObject handle to pushbutton3 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) axes(handles.axes1); imshow([255]); axes(handles.axes2); imshow([255]); axes(handles.axes3); imshow([255]); % hObject handle to pushbutton4 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
完整代码或者代写添加QQ 1564658423