影象邊緣檢測—sobel運算元(灰度影象,彩色影象)
影象為 I.然後進行如下的操作:
為了在一副影象f的(x,y)位置處尋找邊緣的強度和方向,所選擇的工具就是梯度,向量定義為:
z1 | z2 | z3 |
z4 | z5 | z6 |
z7 | z8 | z9 |
分別在x和y兩個方向求導。
該點梯度:
梯度的方向:
以下是灰度圖與灰度圖sobel邊緣
vc++ MFC編寫的程式,灰度圖影象畫素陣列是靜態申請的,Data[i][j]為畫素值,i,j為座標,因為畫素申請int 型,處理結果可能會超出[0,255],所以結果要判斷大於255為255。畫素型別為unsigned char就不會出現這個問題。
void CShowPicView::OnSOBELgradient() //SOBEL梯度 //Sobel邊緣檢測演算法
{
CShowPicDoc* pDoc = GetDocument();
CDC* pDC=GetDC();
// 字串
CString str;
int lWidth =intWidth;
int lHeight =intHeight;
int i;
int j;
unsigned char g[610][800];
int gx,gy,temp1;
for(j = 1; j < intWidth-1; j++)
{
for(i = 1; i 255)
g[i][j]=255;
else
g[i][j]=temp1;
pDC->SetPixel(j+intWidth+30,i,RGB(g[i][j],g[i][j],g[i][j]));
}
}
str.Format("SOBEL");
pDC->TextOut((int)(intWidth*1.5+50), intHeight, str);
}
以下是原圖(彩色圖)與彩色圖sobel邊緣:
vc++
MFC編寫的程式,彩色圖影象畫素陣列是動態申請的,pic[y][x][0],pic[y][x][1],pic[y][x][2] 為原圖的三通道的畫素值,x,y為座標值
void CShowPicView::Ontwodimension()
{
CShowPicDoc* pDoc = GetDocument();
CDC* pDC=GetDC();
// 字串
CString str;
int x,y;
int i,n;
x=intHeight;
y=intWidth;
int **g1,**g2,**g3;
g1 = new int*[x]; //行 //申請行的空間
g2 = new int*[x];
g3 = new int*[x];
//每行的列申請空間
for(i=0; ipic[y+1][x-1][0]+2*pDoc->pic[y+1][x][0]+pDoc->pic[y+1][x+1][0] - pDoc->pic[y-1][x-1][0]-2*pDoc->pic[y-1][x][0]-pDoc->pic[y-1][x+1][0];
gy1=pDoc->pic[y-1][x-1][0]+2*pDoc->pic[y][x-1][0]+pDoc->pic[y+1][x-1][0] - pDoc->pic[y-1][x+1][0]-2*pDoc->pic[y][x+1][0]-pDoc->pic[y+1][x+1][0];
if(sqrt(gx1*gx1+gy1*gy1)>255)
g1[y][x]=255;
else
g1[y][x]=sqrt(gx1*gx1+gy1*gy1);
gx2=pDoc->pic[y+1][x-1][1]+2*pDoc->pic[y+1][x][1]+pDoc->pic[y+1][x+1][1] - pDoc->pic[y-1][x-1][1]-2*pDoc->pic[y-1][x][1]-pDoc->pic[y-1][x+1][1];
gy2=pDoc->pic[y-1][x-1][1]+2*pDoc->pic[y][x-1][1]+pDoc->pic[y+1][x-1][1] - pDoc->pic[y-1][x+1][1]-2*pDoc->pic[y][x+1][1]-pDoc->pic[y+1][x+1][1];
if(sqrt(gx2*gx2+gy2*gy2)>255)
g2[y][x]=255;
else
g2[y][x]=sqrt(gx2*gx2+gy2*gy2);
gx3=pDoc->pic[y+1][x-1][2]+2*pDoc->pic[y+1][x][2]+pDoc->pic[y+1][x+1][2] - pDoc->pic[y-1][x-1][2]-2*pDoc->pic[y-1][x][2]-pDoc->pic[y-1][x+1][2];
gy3=pDoc->pic[y-1][x-1][2]+2*pDoc->pic[y][x-1][2]+pDoc->pic[y+1][x-1][2] - pDoc->pic[y-1][x+1][2]-2*pDoc->pic[y][x+1][2]-pDoc->pic[y+1][x+1][2];
if(sqrt(gx3*gx3+gy3*gy3)>255)
g3[y][x]=255;
else
g3[y][x]=sqrt(gx3*gx3+gy3*gy3);
pDC->SetPixel(x+1*intWidth+30,y,RGB(g1[y][x],g2[y][x],g3[y][x]));
}
}
for(i=0;i
相關文章
- 影象特徵提取:Sobel邊緣檢測特徵
- 經典影象邊緣檢測(模板法思想)——Kirsch運算元
- 【OpenCV】影像變換(二)邊緣檢測:梯度運算元、Sobel運算元和Laplace運算元OpenCV梯度
- OpenCV-Python教程(6)(7)(8): Sobel運算元 Laplacian運算元 Canny邊緣檢測OpenCVPython
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- Python-OpenCV 處理影象(五):影象中邊界和輪廓檢測PythonOpenCV
- Javascript影象處理之虛擬邊緣JavaScript
- matlab中將RGB影象轉化為灰度影象Matlab
- 影象處理入門:目標檢測和影象檢索綜述
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- Python-OpenCV 處理影象(二):濾鏡和影象運算PythonOpenCV
- Laplacian(iOS)運算元(邊緣檢測)iOS
- Python-OpenCV 處理影象(七):影象灰度化處理PythonOpenCV
- 【數字影象處理】七.MFC影象增強之影象普通平滑、高斯平滑、Laplacian、Sobel、Prewitt銳化詳解
- 影象相似度比較和檢測影象中的特定物
- 圖形影象處理-之-彩色轉化到灰度的速度優化優化
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- OPENCV例程2 :CANNY運算元邊緣檢測OpenCV
- OpenCV(iOS)的邊緣檢測和Canny運算元OpenCViOS
- iOS 影象處理 - 影象拼接iOS
- 【數字影象處理】五.MFC影象點運算之灰度線性變化、灰度非線性變化、閾值化和均衡化處理詳解
- 影象處理之影象增強
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- 【數字影象處理】三.MFC實現影象灰度、取樣和量化功能詳解
- 影象中二維碼的檢測和定位
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- MATLAB數字影象處理(二)影象增強Matlab
- C++影象處理 -- 影象黑白調整應用C++
- 計算機視覺—影象特效(3)計算機視覺特效
- OpenCV成長之路(9):特徵點檢測與影象匹配OpenCV特徵
- python示例 呼叫影象識別服務識別影象Python
- activity影象亂碼
- UIImage 影象處理UI
- Bayer影象處理
- 一元、二元函式影象繪製函式