回覆列表
  • 1 # 使用者9002281564055

      Hough變換是實現影象邊緣檢測的一種有效方法,其基本思想是將測量空間的一點變換到參量空間中的一條曲線或一個曲面,而具有同一參量特徵的點交換後在參量空間中相交,透過判斷交點處的積累程度來完成特徵曲線的檢測,基於參量性質的不同,Hough變換可以檢測直線、圓、橢圓、雙曲線、拋物線等。同時,將機率論、模糊集理論、分層迭代的思想和級聯的方法應用於Hough變換的過程中,大大地提高了Hough變換的效率,改善了Hough變換的效能。  實驗主要使用的函式  MATLAB內部常數pi:圓周率 p(= 3.1415926...)  MATLAB常用基本數學函式:  abs(x):純量的絕對值或向量的長度;  round(x):四捨五入至最近整數;  floor(x):地板函式,即捨去正小數至最近整數;  MATLAB常用三角函式  sin(x):正弦函式  cos(x):餘弦函式;  向量的常用函式  max(x): 向量x的元素的最大值。  MATLAB影象型別轉換函式:  rgb2gray:將一副真彩色影象轉換成灰度影象;  im2bw:透過設定高度閾值將真彩色,索引色,灰度圖轉換成二值影象;  MATLAB圖形影象檔案的讀取和顯示函式  imread(filename);  MATLAB二進位制影象及其顯示  imshow(f1)。  用double對二值影象雙精度化  圖形處理:  sobel運算元檢測邊緣  hough變換檢測圓  分別顯示灰度影象:  figure;subplot  Sobel:運算元邊緣檢測影象  hough變換檢測後的影象  實驗相關程式碼  I=imread("*.jpg");f=rgb2gray(I);  f1=im2bw(f,200/255);  BW1=double(f1);  BW=edge(BW1,"sobel",0.4);  r_max=50;  r_min=10;step_r=10;step_angle=pi/12;p=0.7;  [m,n] = size(BW);  size_r = round((r_max-r_min)/step_r)+1;  size_angle = round(2*pi/step_angle);  hough_space = zeros(m,n,size_r);  [rows,cols] = find(BW);  ecount = size(rows);  for i=1:ecount  for r=1:size_r  for k=1:size_angle  a = round(rows(i)-(r_min+(r-1)*step_r)*cos(k*step_angle));  b = round(cols(i)-(r_min+(r-1)*step_r)*sin(k*step_angle));  if(a>0&&a0&&b=max_para*p);  length = size(index);  hough_circle = false(m,n);  for i=1:ecount  for k=1:length  par3 = floor(index(k)/(m*n))+1;  par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;  par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;  if((rows(i)-par1)^2+(cols(i)-par2)^2(r_min+(par3-1)*step_r)^2-5)  hough_circle(rows(i),cols(i)) = true;  end  end  end  for k=1:length  par3 = floor(index(k)/(m*n))+1;  par2 = floor((index(k)-(par3-1)*(m*n))/m)+1;  par1 = index(k)-(par3-1)*(m*n)-(par2-1)*m;  par3 = r_min+(par3-1)*step_r;  fprintf(1,"Center %d %d radius %d\n",par1,par2,par3);  para(:,k) = [par1,par2,par3];  end  subplot(221),imshow(f);  subplot(222),imshow(BW);  subplot(223),imshow(hough_circle)

  • 中秋節和大豐收的關聯?
  • 愛情、友情、親情,你是怎麼看待的?