影象邊緣檢測—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
相關文章
- matlab中將RGB影象轉化為灰度影象Matlab
- [Python影象處理] 五.影象融合、加法運算及影象型別轉換Python型別
- 影象處理入門:目標檢測和影象檢索綜述
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- [影象處理] Python+OpenCV實現車牌區域識別及Sobel運算元PythonOpenCV
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- [Python影象處理] 六.影象縮放、影象旋轉、影象翻轉與影象平移Python
- [Python影象處理] 十.形態學之影象頂帽運算和黑帽運算Python
- [Python影象處理] 八.影象腐蝕與影象膨脹Python
- 影象處理之影象增強
- 影象檢索(一)--綜述
- 繪製影象
- python示例 呼叫影象識別服務識別影象Python
- 計算機視覺—影象特效(3)計算機視覺特效
- activity影象亂碼
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- [譯]計算機如何高效識別影象?計算機
- MATLAB中的影象融合Matlab
- 細粒度影象分類
- SVG 影象入門教程SVG
- 響應式影象教程
- GAN生成影象綜述
- 計算機視覺筆記及資料整理(含影象分割、目標檢測)計算機視覺筆記
- 基於雜湊的影象檢索技術
- 深入學習OpenCV檢測及分割影象的目標區域OpenCV
- matlab中中影象PSNR和SSIM的計算Matlab
- 影象檢索:資訊檢索評價指標mAP指標
- sobel運算元,matlab實現Matlab
- 影象主題色的提取
- 譯文:影象優化(上)優化
- 數字影象處理DIP
- 影象特徵提取之HoG特徵特徵HOG
- 百度提出NCRF:深度學習癌症影象檢測效率再提升CRF深度學習
- 經典影象顯著性檢測演算法 AC/HC/LC/FT演算法
- [Python影象處理] 七.影象閾值化處理及演算法對比Python演算法
- 計算機影象與視覺入門必備計算機視覺
- [Python影象處理] 一.影象處理基礎知識及OpenCV入門函式PythonOpenCV函式
- 影象樣本不夠用?元學習幫你解決
- 10 個 Python 影象編輯工具Python