成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 利用Matlab提取圖片曲線

利用Matlab提取圖片曲線

熱門標(biāo)簽:西藏房產(chǎn)智能外呼系統(tǒng)要多少錢 ai電銷機(jī)器人源碼 湛江智能外呼系統(tǒng)廠家 百度地圖標(biāo)注沒有了 宿遷星美防封電銷卡 ai電話機(jī)器人哪里好 外呼并發(fā)線路 地圖標(biāo)注審核表 長沙高頻外呼系統(tǒng)原理是什么

利用 MATLAB 提取圖片曲線

給你一張圖片,如何提取里面曲線的數(shù)據(jù),從而利用這些數(shù)據(jù)進(jìn)行圖像重繪、加工處理、測距、擬合得到函數(shù)表達(dá)式等操作呢?

行文動機(jī)

前段時(shí)間,有個(gè)朋友問了我一個(gè)問題,大概意思就是要給圖像的流線測距離,在我的印象里面,MATLAB 是似乎沒有這種直接的功能的。

那么換個(gè)角度來理解一下這個(gè)問題,如果給你一張圖像,如何提取里面點(diǎn)的數(shù)據(jù)?其實(shí),有了曲線的數(shù)據(jù),后面想干嘛就干嘛了。

一直沒空弄這個(gè),今天偷閑,安排!??!

圖像的讀入與裁剪

以下面的圖像作為例子。

我們先導(dǎo)入圖像,進(jìn)行簡單的裁剪。為什么要裁剪呢?其實(shí)不裁剪也沒關(guān)系,因?yàn)槲液竺媸腔谙袼攸c(diǎn)的顏色來提取的曲線。如果你想提取的曲線不能通過顏色區(qū)分,那么,最好通過裁剪,把你不想要的部分盡可能地剪掉。

%% 讀入圖片,展示,有必要的話可以適當(dāng)做一些裁剪
A = imread('a.jpg');%讀取到一張圖片
imshow(A);
A = imcrop(A);%使用鼠標(biāo)裁剪一波
imshow(A);
[low_num,col_num,~] = size(A);

顏色拾取

觀察圖像發(fā)現(xiàn),我們要提取的曲線是藍(lán)色的,所以我希望通過顏色把它區(qū)分出來。那么我們就要知道這個(gè)曲線的 RGB 值。我希望通過鼠標(biāo)點(diǎn)選的方式獲取到顏色值。

這里我偷個(gè)懶,直接采用了 slandarer 開源的顏色提取工具。這個(gè)模塊不是我寫的,特此聲明,請尊重原創(chuàng)。

%% 顏色提取
getcolor();
color = color_list_temp(1,:);
function getcolor
global control;
global ima;
global GUI;
global x_limit;
global y_limit;
global color;
global a;
global color_number;
global color_list;
global page;
global total_page;
global color_list_temp;
color=[];
page=1;
total_page=2;
color_list=[0 0 0];
color_list(1,:)=[];
color_number=1;
rgb_type=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI.fig=figure('units','pixels',...
    'position',[350 100 800 500],...
    'Numbertitle','off',...
    'menubar','none',...
    'resize','off',...
    'name','getcolor',...
    'color',[0.95 0.95 0.95]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
uh1=uimenu('label','設(shè)置');
uimenu(uh1,'label','RGB類型設(shè)置','callback',@RGBset)
    function RGBset(~,~)
        GUI.rgbfig=figure('units','pixels',...
        'position',[360 370 180 200],...
        'Numbertitle','off',...
        'menubar','none',...
        'name','RGBset',...
        'resize','off');
        GUI.axes=axes('Units','pixels',...
         'parent',GUI.rgbfig,...  
        'PlotBoxAspectRatio',[1 1 1],...
        'Color',[0.95 0.95 0.95],...
        'Box','on', ...
        'XLim',[0 500],...
        'YLim',[0 500], ...
        'XColor',[0.95 0.95 0.95],...
        'YColor',[0.95 0.95 0.95],...
        'YDir','reverse', ...
        'xtick',[],'ytick',[]);
        GUI.checkbox1=uicontrol('parent',GUI.rgbfig,...
            'style','checkbox',...
            'string','范圍:0-1',...
            'position',[45 150 400 30],...
            'fontsize',10,...
            'value',rgb_type,...
            'callback',@ifon1);
        GUI.checkbox255=uicontrol('parent',GUI.rgbfig,...
            'style','checkbox',...
            'string','范圍:0-255',...
            'position',[45 120 400 30],...
            'fontsize',10,...
            'value',~rgb_type,...
            'callback',@ifon255);
        GUI.makesurebutton=uicontrol('parent',GUI.rgbfig,...
            'style','pushbutton',...
            'string','確定設(shè)置',...
            'position',[45 70 100 25],...
            'fontsize',10,...
            'callback',@settype);
        
        function ifon1(~,~)
            if(get(GUI.checkbox1,'value')==1)
                set(GUI.checkbox1,'value',1);
                set(GUI.checkbox255,'value',0);
            else
                set(GUI.checkbox1,'value',1);
            end               
        end
        function ifon255(~,~)
            if(get(GUI.checkbox255,'value')==1)
                set(GUI.checkbox255,'value',1);
                set(GUI.checkbox1,'value',0);
            else
                set(GUI.checkbox255,'value',1);
            end                
        end
        function settype(~,~)
            rgb_type=get(GUI.checkbox1,'value');
            if ~isempty(color)
                set(GUI.text2,'string',['[',num2str((color/255).*rgb_type+color.*(~rgb_type)),']']);
            end
            show_color(page);
            close(GUI.rgbfig)
        end      
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
uh2=uimenu('label','保存');
uimenu(uh2,'label','儲存為mat','callback',@saveas_mat)
uimenu(uh2,'label','儲存為txt','callback',@saveas_txt)
uimenu(uh2,'label','儲存為excel','callback',@saveas_exl)
uimenupic=uimenu(uh2,'label','儲存為對照圖');
uimenu(uimenupic,'label','儲存全部頁碼','callback',@saveas_pic_all);
uimenu(uimenupic,'label','儲存當(dāng)前頁碼','callback',@saveas_pic_now);
function saveas_mat(~,~)
    try
    [filename, pathname] = uiputfile({'*.mat','mat'});
        color_list_temp=(color_list/255).*rgb_type+color_list.*(~rgb_type);
        save([pathname,filename],'color_list_temp');
    catch
    end  
end
function saveas_txt(~,~)
    try 
    [filename, pathname] = uiputfile({'*.txt','記事本'});
        color_list_temp=(color_list/255).*rgb_type+color_list.*(~rgb_type);
        [m,n]=size(color_list_temp);
        fid=fopen([ pathname,filename],'w');
        for ii=1:m
            for jj=1:n
                if jj==n
                    fprintf(fid,'%d\r\n',color_list_temp(ii,jj));
                else
                    fprintf(fid,'%d\r\t',color_list_temp(ii,jj));
                end
            end
        end
        fclose(fid);
    catch
    end
end
function saveas_exl(~,~)
    [filename, pathname] = uiputfile({'*.xlsx','記事本'});
    color_list_temp=(color_list/255).*rgb_type+color_list.*(~rgb_type);
    xlswrite([ pathname,filename],color_list_temp) 
    
end
function saveas_pic_all(~,~)
    page_with_color=total_page-1;
    px=50;
    gap_px=10;
    pic=ones(9*px,page_with_color*px+(page_with_color-1)*gap_px,3);
    for p=1:page_with_color
        for ii=(p-1)*9+1:p*9
            for kk=1:3
                if ii=length(color_list)
                    pic((ii-(p-1)*9-1)*px+1:(ii-(p-1)*9)*px,(p-1)*(px+gap_px)+1:(p-1)*(px+gap_px)+px,kk)=color_list(ii,kk)/255;     
                end
            end
        end
    end
    [filename, pathname] = uiputfile({'*.jpg;*.png','All Image Files';...
            '*.jpg','JPG';'*.png','PNG' });
    imwrite(pic,[pathname,filename]);
end
function saveas_pic_now(~,~)
    try
    [m,~]=size(color_list);
    m=m-(page-1)*9;
    m(m>9)=9;
    px=50;
    pic=ones(9*px,1*px,3);
    if m>0
        for ii=(page-1)*9+1:(page-1)*9+m
            for kk=1:3
                pic((ii-1)*px+1:ii*px,1:px,kk)=color_list(ii,kk)/255;      
            end
        end
    else
    end
    [filename, pathname] = uiputfile({'*.jpg;*.png','All Image Files';...
            '*.jpg','JPG';'*.png','PNG' });
    imwrite(pic,[pathname,filename]);
    catch
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%uh3=uimenu('label','導(dǎo)入');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI.text=uicontrol('parent',GUI.fig,...
    'style','text',...
    'string','色彩識別',...
    'horizontalalign','center',...
    'position',[50 440 400 30],...
    'backgroundcolor',[0.85 0.89 0.85],...
    'foregroundcolor','k',...
    'fontsize',15);
GUI.text1=uicontrol('parent',GUI.fig,...
    'style','text',...
    'string','',...
    'horizontalalign','center',...
    'position',[460 330 100 100],...
    'backgroundcolor',[1 1 1],...
    'foregroundcolor','k',...
    'fontsize',10);
GUI.text2=uicontrol('parent',GUI.fig,...
    'style','text',...
    'string','',...
    'horizontalalign','center',...
    'position',[350 440 210 30],...
    'backgroundcolor',[1 1 1],...
    'foregroundcolor','k',...
    'fontsize',10);
GUI.savecolorbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','儲存顏色',...
    'position',[460 290 100 30],...
    'backgroundcolor',[0.85 0.89 0.85],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@save_color);
GUI.deletedatabutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','清空數(shù)據(jù)',...
    'position',[460 230 100 30],...
    'backgroundcolor',[0.8 0.9 0.9],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@clear_data);
GUI.deletepicbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','刪除圖片',...
    'position',[460 180 100 30],...
    'backgroundcolor',[0.8 0.9 0.9],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@delete_pic);
GUI.getcapbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','屏幕截圖',...
    'position',[460 130 100 30],...
    'backgroundcolor',[0.8 0.9 0.9],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@get_capture);
GUI.getpicbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','讀取圖片',...
    'position',[460 80 100 30],...
    'backgroundcolor',[0.8 0.9 0.9],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@getImage);
GUI.getcolorbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'tag','recc',...
    'string','獲取顏色',...
    'position',[460 30 100 30],...
    'backgroundcolor',[0.8 0.9 0.9],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@get_color);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:9
    GUI.text=uicontrol('parent',GUI.fig,...
    'tag',num2str(i),...
    'style','text',...
    'string','',...
    'horizontalalign','left',...
    'position',[600 440-40*(i-1) 30 30],...
    'backgroundcolor',[1 1 1],...
    'foregroundcolor','k',...
    'fontsize',10);    
end

for i=1:9
    GUI.text=uicontrol('parent',GUI.fig,...
    'tag',[num2str(i),'t'],...
    'style','text',...
    'string','',...
    'horizontalalign','center',...
    'position',[640 440-40*(i-1) 150 30],...
    'backgroundcolor',[1 1 1],...
    'foregroundcolor','k',...
    'fontsize',8);    
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI.inputbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','清除最后一個(gè)顏色',...
    'position',[600 80 190 30],...
    'backgroundcolor',[0.85 0.89 0.85],...
    'foregroundcolor','k',...
    'fontsize',15,...
    'callback',@delete_last);
%GUI.inputbutton=uicontrol('parent',GUI.fig,...
    %'style','pushbutton',...
    %'string','導(dǎo)出數(shù)據(jù)',...
    %'position',[600 30 190 30],...
    %'backgroundcolor',[0.85 0.89 0.85],...
    %'foregroundcolor','k',...
    %'fontsize',15,...
    %'callback',@output_data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI.lpbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','上一頁',...
    'position',[600 30 70 30],...
    'backgroundcolor',[0.85 0.85 0.85],...
    'foregroundcolor','k',...
    'fontsize',12,...
    'callback',@lastpage);
GUI.npbutton=uicontrol('parent',GUI.fig,...
    'style','pushbutton',...
    'string','下一頁>',...
    'position',[720 30 70 30],...
    'backgroundcolor',[0.85 0.85 0.85],...
    'foregroundcolor','k',...
    'fontsize',12,...
    'callback',@nextpage);
GUI.page=uicontrol('parent',GUI.fig,...
    'style','text',...
    'string',[num2str(page),'/',num2str(total_page)],...
    'horizontalalign','center',...
    'position',[670 30 50 27],...
    'backgroundcolor',[0.95 0.95 0.95],...
    'foregroundcolor','k',...
    'fontsize',12);
function lastpage(~,~)
    page=page-1;
    page(page1)=1;
    set(GUI.page,'string',[num2str(page),'/',num2str(total_page)]);
    show_color(page);
end
function nextpage(~,~)
    page=page+1;
    page(page>total_page)=total_page;
    set(GUI.page,'string',[num2str(page),'/',num2str(total_page)]);
    show_color(page);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GUI.axes=axes('Units','pixels',...
      'PlotBoxAspectRatio',[1 1 1],...
      'Position',[50 30 400 400],...
      'Color',[0.98 0.98 0.98],...
      'Box','on', ...
      'XLim',[0 500],...
      'YLim',[0 500], ...
      'XColor','w','YColor','w',...
      'YDir','reverse', ...
      'Tag','picbagaxes',...
      'xtick',[],'ytick',[]);
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %function output_data(~,~)
        %if color_number>1
            %disp(color_list)
        %end
    %end
    function show_color(cur_page)
        len_list=size(color_list,1);
        for ii=(cur_page-1)*9+1:(cur_page-1)*9+9
            if(ii=len_list)
                set(findobj('tag',num2str(ii-(cur_page-1)*9)),'backgroundcolor',color_list(ii,:)/255)
                set(findobj('tag',[num2str(ii-(cur_page-1)*9),'t']),'string',['[',num2str((color_list(ii,:)/255).*rgb_type+color_list(ii,:).*(~rgb_type)),']'])
            else
                set(findobj('tag',num2str(ii-(cur_page-1)*9)),'backgroundcolor',[1 1 1])
                set(findobj('tag',[num2str(ii-(cur_page-1)*9),'t']),'string','')
            end
        end  
    end

    function save_color(~,~)
        if ~isempty(get(GUI.text2,'string'))
            %set(findobj('tag',num2str(color_number)),'backgroundcolor',color/255)
            %set(findobj('tag',[num2str(color_number),'t']),'string',['[',num2str((color/255).*rgb_type+color.*(~rgb_type)),']'])
            color_list(color_number,:)=color;%(color/255).*rgb_type+color.*(~rgb_type);
            color_number=color_number+1;
            if color_number-1>(total_page-1)*9
                page=ceil(color_number/9);
                total_page=total_page+1;
                set(GUI.page,'string',[num2str(page),'/',num2str(total_page)]);
                
            end
            show_color(page)
        end
    end

    function delete_last(~,~)
        if color_number>=1
            %set(findobj('tag',num2str(color_number-1)),'backgroundcolor',[1 1 1])
            %set(findobj('tag',[num2str(color_number-1),'t']),'string','')
            color_list(end,:)=[];
            color_number=color_number-1;
            if color_number-2=(total_page-2)*9
                page=ceil((color_number-1)/9);
                total_page=total_page-1;
                set(GUI.page,'string',[num2str(page),'/',num2str(total_page)]);
                
            end
            show_color(page)
        end
    end

    function delete_pic(~,~)
        control=0;
        set(findobj('Tag','picbagaxes'),...
        'XLim',[0 500],...
        'YLim',[0 500],...
        'Position',[50 30 400 400],...
        'Color',[0.98 0.98 0.98]);
        delete(a);
    end

    function clear_data(~,~)
        control=0;
        set(GUI.text1,'backgroundcolor',[1 1 1]);
        set(GUI.text2,'string','');
        set(findobj('Tag','picbagaxes'),...
        'XLim',[0 500],...
        'YLim',[0 500],...
        'Position',[50 30 400 400],...
        'Color',[0.98 0.98 0.98]);
        set(findobj('tag','recc'),'string','獲取顏色');
        delete(a);
    end

    function get_color(~,~)
        if control==0
            set(GUI.text1,'backgroundcolor',[1 1 1]);
            set(GUI.text2,'string','');       
        end
        control=1;
        set(gcf,'WindowButtonMotionFcn',@whilemovefcn)  
        set(gcf,'WindowButtonDownFcn',@whileclickfcn)
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function whilemovefcn(~,~)
        xy=get(gca,'CurrentPoint');
        x=xy(1,2);y=xy(1,1);
        if x=x_limity=y_limitx>=0y>=0
            x(x>x_limit)=x_limit;
            y(y>y_limit)=y_limit;
            x(x1)=1;
            y(y1)=1;
            x=round(x);
            y=round(y);
            if control==1
                color=double([ima(x,y,1),ima(x,y,2),ima(x,y,3)]);
                set(GUI.text1,'backgroundcolor',color/255);
                set(GUI.text2,'string',['[',num2str((color/255).*rgb_type+color.*(~rgb_type)),']']);
            end
        else
            if control==1
                set(GUI.text1,'backgroundcolor',[1 1 1]);
                set(GUI.text2,'string','');    
            end
        end
    end

    function whileclickfcn(~,~)          
            xy=get(gca,'CurrentPoint');
            x=xy(1,2);y=xy(1,1);
            if x=x_limity=y_limitx>=0y>=0
                control=0;
                set(GUI.text1,'backgroundcolor',color/255);
                set(GUI.text2,'string',['[',num2str((color/255).*rgb_type+color.*(~rgb_type)),']']);
                set(findobj('tag','recc'),'string','繼續(xù)取色');
                %disp(color/255)
            end
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    function get_capture(~,~)
        screensize=get(0,'screensize');
        screensize=1.5*screensize;
        robot=java.awt.Robot();
        rectangle=java.awt.Rectangle();
        rectangle.x=0;
        rectangle.y=0;
        rectangle.width=screensize(3);
        rectangle.height=screensize(4);
        image=robot.createScreenCapture(rectangle);
        data=image.getData(); 
        temp=zeros(screensize(3)*screensize(4)*3,1);
        temp=data.getPixels(0,0,screensize(3),screensize(4),temp);  
        temp=uint8(temp);
        R=temp(1:3:end); 
        G=temp(2:3:end); 
        B=temp(3:3:end);
        R=reshape(R,[screensize(3),screensize(4)]); 
        G=reshape(G,[screensize(3),screensize(4)]); 
        B=reshape(B,[screensize(3),screensize(4)]);
        R=R';
        G=G';
        B=B';
        x_limit=screensize(4); 
        y_limit=screensize(3);
        leng=max([x_limit,y_limit]);
        set(findobj('Tag','picbagaxes'),...
        'XLim',[0 leng],...
        'YLim',[0 leng]);
        ima=cat(3,R,G,B);
        delete(a);
        a=imshow(ima);
    end
    function getImage(~,~)
        warning off;
        try
        [filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
            '*.*','All Files' });
        ima = imread([ pathname,filename]);
        [x,y,~]=size(ima);
        x_limit=x;y_limit=y;
        leng=max([x_limit,y_limit]);
        set(findobj('Tag','picbagaxes'),...
        'XLim',[0 leng],...
        'YLim',[0 leng]);
        delete(a);
        a=imshow(ima);
        catch
        end
    end  
end

顏色轉(zhuǎn)換與色差計(jì)算

用 RGB 比較顏色之間的相似度時(shí),存在很大的問題,不建議直接使用,因?yàn)橥粋€(gè)通道的一點(diǎn)改變,會導(dǎo)致最后融合在一起的顏色發(fā)生巨大變化,而如果三個(gè)通道的同時(shí)改變,卻只會使最后的明暗發(fā)生變化,色調(diào)并不會產(chǎn)生巨大變化。而這也是H系列色彩空間普遍存在的問題。

所以,經(jīng)過思考,我決定 RGB 的值轉(zhuǎn)為 HSV 顏色空間,再進(jìn)行色差計(jì)算。

色差計(jì)算,直接利用兩個(gè)點(diǎn)的顏色在椎體上的歐式距離,即通過計(jì)算如下坐標(biāo)點(diǎn)的歐式距離。我們通過編寫 color_dist 函數(shù)計(jì)算。

%計(jì)算兩個(gè) HSV 顏色之間的距離
function d = color_dist(color_std,color)
[x0,y0,z0] = getPos(color_std(1),color_std(2),color_std(3));
[x,y,z] = getPos(color(1),color(2),color(3));
d = sqrt((x-x0).^2+(y-y0).^2+(z-z0)^2);
end

function [x,y,z] = getPos(H,S,V)
r = 1;
h = sqrt(3);
x = r*V*S*cos(H);
y = r*V*S*sin(H);
z = h*(1-V);
end

%% 顏色轉(zhuǎn)為 HSV,再進(jìn)行色差計(jì)算
A2 = rgb2hsv(A);
color2 = rgb2hsv(color);
D = ones(low_num,col_num)*2;
for i=1:low_num
    for j=1:col_num
        D(i,j) = color_dist(color2,A2(i,j,:));
    end
end
mesh(D);

分離曲線

通過調(diào)節(jié)閾值參數(shù),可以把我們想要的坐標(biāo)軸過濾掉。閾值越小,過濾效果越明顯。

%% 根據(jù)色彩,把想要的曲線分離出來
threshold = 0.5;%可以調(diào)整閾值使分離效果變好
I = (Dthreshold);
for i=1:3
    RGB= A(:,:,i);
    RGB(~I)=255;
    A3(:,:,i) = RGB;
end
imshow(A3)

二值化,提取數(shù)據(jù)

二值化圖像是以矩陣形式存儲的。我們根據(jù)色素點(diǎn)在矩陣中的位置,利用行列指標(biāo)和坐標(biāo)軸的標(biāo)準(zhǔn)化關(guān)系,提取數(shù)據(jù),重建坐標(biāo)系。

%% 二值化,提取數(shù)據(jù)
leftUp = [0,1];%標(biāo)注截取的圖片的左上角和右下角
rightDown = [1,0];
B = rgb2gray(A3);
imshow(B);
[pos_row,pow_col] = find(B~=255);
Ps = [pos_row-1,pow_col-1];
Ps(:,1) = Ps(:,1)./(low_num-1);
Ps(:,2) = Ps(:,2)./(col_num-1);
x = (rightDown(1)-leftUp(1)).*Ps(:,2)+leftUp(1);
y = leftUp(2)-abs(rightDown(2)-leftUp(2)).*Ps(:,1);
scatter(x,y,0.38);
X = [x,y];

看著八九不離十了,但是注意這里的坐標(biāo)點(diǎn)是以散點(diǎn)的形式畫出來的。是無序且沒有區(qū)分度的,我們甚至無法使用plot。

數(shù)據(jù)點(diǎn)分類與排序

肉眼可見,這幾條曲線是分隔開的。我們?nèi)绾伟堰@些數(shù)據(jù)按曲線分開且其上的點(diǎn)按順序排好呢?我的做法是,使用鼠標(biāo)選中你在意的曲線的一端,利用距離延拓法,還原整條曲線。

%% 數(shù)據(jù)分類與排序
N = size(X,1);
gfrom = ginput(1);
[~,minI] = min(sum((X - repmat(gfrom,N,1)).^2,2));
from = X(minI,:);
X(minI,:) = [];
X = [from;X];
tol = 0.01;
X1 = findcurvepath(X,tol);
plot(X1(:,1),X1(:,2))

其中用到了一個(gè)自己寫函數(shù) findcurvepath,它可以從一個(gè)數(shù)據(jù)點(diǎn)出發(fā),把所有的數(shù)據(jù)點(diǎn)按距離遠(yuǎn)近,像串珍珠一樣串在一塊。

function ps1 = findcurvepath(ps0,tol)
%這個(gè)函數(shù)將點(diǎn)就近連接起來
ps1(1,1:2) = ps0(1,1:2);%將第一個(gè)取出來
ps0 = ps0(2:end,:);%ps0重置為剩下的部分
p = ps1(end,:);%p是取出來的最后一個(gè)
while ~isempty(ps0)
    
    i = 1;
    while 1
        distances = p2psdistance(p,ps0);
        inds = find(distances == min(distances));%%%%%%%修復(fù)一個(gè)bug
        if length(inds) > 1
            if size(ps1,1)i+1
                break;
            end
            p = ps1(end-i,:);%p是取出來的最后一個(gè)
            i = i+1;
        else
            break;
        end
    end
    
    distances = p2psdistance(p,ps0);
    if min(distances)>tol
        break;
    end
    inds = find(distances == min(distances));%%%%%%%修復(fù)一個(gè)bug
    ind = inds(1);
    ps1(end+1,1:2) = ps0(ind,1:2);
    ps0(ind,:) = [];
    p = ps1(end,:);
end
end
function distances = p2psdistance(p,ps)
distances = sqrt((p(1)-ps(:,1)).^2+(p(2)-ps(:,2)).^2);
end

后話

我不喜歡做 GUI,因?yàn)閬y七八糟的界面用起來確實(shí)令人心煩。另外一方面,不管是 GUI 或者說進(jìn)一步的 exe 桌面程序,都依賴于 MATLAB 的環(huán)境。也就是說,你要運(yùn)行代碼,就必須先裝 MATLAB 的環(huán)境。試想,一個(gè)安裝過和簡單用過 MATLAB 的人,都是有能力可以通過代碼修改一些參數(shù)的,那么你做 GUI 不是畫蛇添足么。

到此這篇關(guān)于利用Matlab提取圖片曲線的文章就介紹到這了,更多相關(guān)Matlab提取圖片曲線內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Matlab實(shí)現(xiàn)時(shí)間序列預(yù)測分類實(shí)例代碼
  • 利用Matlab繪制各類特殊圖形的實(shí)例代碼
  • 圖文詳解matlab原始處理圖像幾何變換
  • Matlab如何實(shí)現(xiàn)矩陣復(fù)制擴(kuò)充
  • 如何利用Matlab制作一款真正的拼圖小游戲

標(biāo)簽:海南 林芝 盤錦 南平 大同 寧夏 普洱 漯河

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《利用Matlab提取圖片曲線》,本文關(guān)鍵詞  利用,Matlab,提取,圖片,曲線,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《利用Matlab提取圖片曲線》相關(guān)的同類信息!
  • 本頁收集關(guān)于利用Matlab提取圖片曲線的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品人成电影在线观看| 欧洲不卡av| av在线资源| 亚洲最新在线视频| 综合欧美视频一区二区三区| 秋霞成人影院| 99久久精品免费| 性xxxx搡xxxxx搡欧美| 2020av在线| 狠狠干婷婷色| 亚洲欧洲国产精品一区| 高清一区二区三区四区五区| 国产成人麻豆精品午夜在线| 色综合久久网| 一区二区视频在线免费观看| 亚洲第一区中文字幕| 中文字幕资源在线观看| 一个人看的www视频在线免费观看| 亚洲视频中文字幕| 久久久久免费精品| 国产系列在线观看| 亚洲免费在线播放| 日本高清在线观看视频| 一级日本黄色片| www.天堂乱色| 国产精品你懂的在线观看| 一区二区国产视频| 日韩三级视频在线播放| 欧美剧情片在线观看| 国产精品扒开腿做爽爽爽视频软件| 久久精品视频免费播放| 精品免费视频一卡2卡三卡4卡不卡| 91老司机精品视频| 日韩中文在线视频| 在线亚洲精品福利网址导航| 国产精品久久久久9999| 中文字幕在线免费观看| 视频一区二区精品的福利| 欧美亚洲国产视频小说| 欧美三级中文字幕| 成人av免费电影| 肉色超薄丝袜脚交69xx图片| 青青青在线视频| 国产又粗又猛又黄| 亚洲欧美日韩免费| 成人免费无遮挡| 久久综合福利| 日韩欧美综合在线视频| 亚洲深夜福利在线| 日本亚州欧洲精品不卡| 日韩中文字幕在线视频| 国产视频一区二| 国产精品亚洲а∨天堂免在线| 日韩精品成人在线观看| 日韩影院免费视频| av福利导福航大全在线| chinese叫床对白videos| 日韩欧美精品在线观看| 手机看片日韩国产| 91精品国产色综合久久不卡98口| 中文字幕av第一页| 国产精品女人久久久久久| 日韩精品视频在线| 无码毛片aaa在线| 久久精品欧美一区二区三区不卡| 日韩av在线高清| 久久91精品国产91久久跳| 欧美国产成人精品| 日韩一区二区三免费高清| 97人妻人人揉人人躁人人| 日韩av影视大全| 国产精品欧美日韩| 欧美香蕉爽爽人人爽| 日韩成人精品一区二区三区| 成人乱人伦精品视频在线观看| 一路向西2在线观看| 精品国产乱码久久久久久婷婷| 成人国产精品久久久久久亚洲| 色视频精品视频在线观看| 精品国产一区二区三区日日嗨| 亚洲国产精品一区二区久久恐怖片| 精品久久中文字幕久久av| 亚洲毛片在线播放| 久久精品无码专区| 99久久激情视频| 777久久久精品| 日韩精品中文字幕久久臀| 网红女主播少妇精品视频| 中日韩免视频上线全都免费| 一区二区三区视频在线观看视频| 亚洲综合视频在线观看| 美女一区二区久久| 国产自产自拍视频在线观看| 日av在线播放中文不卡| 伊人精品在线| 久久夜色精品国产噜噜av| 99在线精品免费| 91热这里只有精品| 欧美日本在线看| 日韩av中文| 亚洲激情欧美激情| 日韩人在线观看| 成年女人免费又黄又爽视频| 神马一区二区三区| 国产在线视频91| 在线国产网址| 亚洲高清免费视频| 久久久精品一品道一区| 国产jzjzjz丝袜老师水多| 成年女人的天堂在线| 色欧美乱欧美15图片| 超碰福利在线观看| 国产九色视频| 怡红院av亚洲一区二区三区h| 欧美1—12sexvideos| 日本免费一区二区三区视频| 国产成人自拍网站| av电影在线观看完整版一区二区| 国产免费无遮挡吸奶头视频| 国产精品久久久久久久久久久久午夜片| 国产日韩影视精品| 日韩欧美激情视频| 欧美一区欧美二区| h色视频在线观看| 亚洲天堂网站在线观看视频| 秋霞久久久久久一区二区| 波多野结衣三级在线| 自拍偷拍免费精品| www.四虎精品| 中文字幕va一区二区三区| 日本精品视频在线| 男人天堂资源在线| 色94色欧美sute亚洲线路一ni| 久草热8精品视频在线观看| 秋霞国产午夜精品免费视频| 国产人妻人伦精品| 亚洲AV成人无码一二三区在线| 日韩母乳在线| 免费黄网站在线播放| 国产va免费精品观看精品视频| 欧美精品18videos性欧美| av一区二区三区四区电影| 91久久免费视频| 日本精品久久久久久| 国产精品麻豆va在线播放| 亚洲欧洲精品一区二区| 国产综合18久久久久久| 日韩欧美的一区| 在线观看日韩视频| 中日韩免费视频中文字幕| 中文字幕在线不卡视频| 每日更新av在线播放| 精品国产一区二| 久久99视频精品| 中文字幕日韩高清| 精品视频1区2区3区| 免费av一区二区| 久久久久99精品成人片三人毛片| 蜜臀av性久久久久蜜臀aⅴ四虎| 8av国产精品爽爽ⅴa在线观看| 国模精品视频一区二区三区| 欧美性xxxx18| 国产精品久久久久久妇女| 成人av二区| 久久米奇亚洲| 久久国产剧场电影| 97久久综合精品久久久综合| 色婷婷激情一区二区三区| 国产日产精品久久久久久婷婷| 白白色在线发布| 天天爱天天做天天爽| 91高清视频免费观看| 成人影院在线视频| 欧美成人精品在线视频| 在线成年人视频| 国产高清免费av| 诱受h嗯啊巨肉高潮| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品www在线观看| 日韩欧美在线看| 久久婷婷激情| 永久免费黄色片| 女女同性女同一区二区三区按摩| 亚洲国产另类 国产精品国产免费| 精品一区二区三区视频日产| 亚洲999一在线观看www| 欧美日韩精品免费观看| 欧美丰满少妇人妻精品| 18aaaa精品欧美大片h| 欧美日韩性生活片| 国产又大又黑又粗免费视频| 亚洲国产成人私人影院| 日韩av片免费观看| www.日本高清视频| 欧美日韩一区二区三区不卡视频| 九九这里只精品视在线99| 中文字幕一区免费| 日本10禁啪啪无遮挡免费一区二区| 青青久精品观看视频最新| 综合久久2o19| 免费做暖暖免费观看日本| 成年无码av片在线| 爆操妹子视频在线观看| 91麻豆精品国产91久久久| 激情在线小视频| eeuss影院在线观看第一页| 欧美成人三级| 国产一级在线观看| 久久免费高清| 黄色小视频在线观看| 翁止熄痒禁伦短文合集免费视频| 国产一级18片视频| 亚洲国产成人91精品| 污污片在线免费视频| 午夜精品视频在线观看| 在线免费观看视频黄| 一区二区三区国产盗摄| 一区二区三区在线播放视频| 粉嫩av一区二区三区粉嫩| 午夜日韩激情| 狠狠色噜噜狠狠狠| 久久亚洲一区二区三区四区五区高| 老司机精品视频一区二区| 午夜一区二区三区在线观看| 亚洲欧美日韩国产综合精品二区| 在线看无码的免费网站| 亚洲品质自拍视频网站| h视频在线看| 色婷婷综合网站| 亚洲情趣在线观看| 免费国产h视频在线观看86| 国产成人一区二区三区别| 国产欧美一区二| 国产美女主播在线播放| 成人免费性视频| 天天操综合520| 最近中文字幕在线免费观看| 国产精品美女一区二区三区| 天堂av手机在线| 国产综合中文字幕| 一个人看的www片免费高清视频| 天天综合网 天天综合色| 午夜老司机在线观看| 最近2019中文字幕一页二页| 精品麻豆一区二区三区| 一卡二卡三卡在线观看| 日韩电影免费在线观看网站| 88xx成人网| 妖精视频成人观看www| 日韩欧美亚洲国产精品字幕久久久| 国产精品一区二区欧美黑人喷潮水| 国产一级视频在线播放| 亚洲深夜av| 亚洲精品欧洲| av免费精品一区二区三区| 成人免费淫片95视频观看网站| 成年黄网站在线观看免费| 亚洲天堂av图片| 日韩久久精品成人| 日韩精品最新在线观看| 99草草国产熟女视频在线| 国产精品第5页| 日韩av网址大全| av在线播放免费| 中文字幕亚洲日本| 妞干网在线观看视频| 久久精品日产第一区二区三区| 亚洲AV无码片久久精品| 欧美视频成人| 久久国产乱子伦免费精品| 精品国语对白精品自拍视| 男人艹女人网站| 精品国产精品国产偷麻豆| 欧美日韩视频| 丁香桃色午夜亚洲一区二区三区| 欧洲精品码一区二区三区免费看| 国产高清一区在线观看| 500福利第一精品导航| 秋霞精品一区二区三区| 手机看片一级片| 国自产拍偷拍福利精品免费一| 色屁屁一区二区| 久久精品30| 老头吃奶性行交视频| 男男做性免费视频网| www.成人在线观看| 欧美hd在线| 日本特级黄色大片| 三上悠亚在线一区| 国产在线视频欧美| 国产精品久久久久久av公交车| 日韩在线视频免费看| 韩国精品一区二区| 在线日韩av观看| 精品熟女一区二区三区| 午夜欧美福利视频| 欧美另类极品| 欧美日韩女优| 99精品视频在线免费播放| 欧美一区二区不卡视频| 久久成人在线| 欧美日本亚洲视频| 在线成人精品视频| 香蕉视频在线免费看| www欧美在线| 久精品在线观看| 亚洲性生活视频| 欧美三级午夜理伦三级| 成年人av电影| 不卡在线一区二区| 国产在线a视频| 免费国产视频| 开心九九激情九九欧美日韩精美视频电影| 欧美大波大乳巨大乳| 亚洲美女视频一区| 有码在线播放| 国产一区二区网址| 欧美熟女一区二区| 国产精品变态另类虐交| 嗯~啊~轻一点视频日本在线观看| 污导航在线观看| 日日摸天天添天天添破| 色又黄又爽网站www久久| 搡老女人一区二区三区视频tv| 亚洲另类一区二区| 久久伊伊香蕉| 高清视频一区二区| 91国内精品久久久|