腐蝕文字演算法
A. 膨脹演算法和腐蝕演算法在圖像處理中怎麼應用啊
腐蝕是一種消除邊界點,使邊界向內部收縮的過程。可以用來消除小且無意義的物體。
膨脹是將與物體接觸的所有背景點合並到該物體中,使邊界向外部擴張的過程。可以用來填補物體中的空洞。
B. 不銹鋼板怎麼做腐蝕字
腐蝕,專業的叫法應該叫做蝕刻,在不銹鋼上面腐蝕文字,首先要製作掩膜,俗稱保護膜,保護膜的做法有多種,關鍵是看文字的大小以及標牌數量的多少,從精細度上,目前行業中普遍使用的是感光油墨工藝,即使用感光油墨通過曬版、顯影、固話等工序呈現出文字,然後使用化學或者電化學的工藝進行腐蝕,待腐蝕速度達到後,往往還要進行填漆。
C. opencv的腐蝕用的是什麼演算法
可以修改下,膨脹腐蝕時用到的kernel.
kernel的形狀一般有下面三種:
矩形:
morph_rect
交叉形:
morph_cross
橢圓形:
morph_ellipse
比如:想選用15*15的正方形kernel進行膨脹操作.
可以利用:
mat
element
=
getstructuringelement(morph_rect,
size(15,
15));
dilate(image,
out,
element);
這樣的語句來實現。
D. 數字圖像處理 膨脹和腐蝕演算法的實現
腐蝕的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為1,結果圖像的該像素為1。否則為0。
結果:使二值圖像減小一圈
定義:E = B S = { x,y | SxyB}
膨脹的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為0,結果圖像的該像素為0。否則為1
結果:使二值圖像擴大一圈
定義:E = B S = { x,y | Sxy∩B ≠Ф}
E. 如何進行數字圖像處理中的膨脹和腐蝕計算
腐蝕的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為1,結果圖像的該像素為1。否則為0。
結果:使二值圖像減小一圈
定義:E = B S = { x,y | SxyB}
膨脹的演算法:
用3x3的結構元素,掃描圖像的每一個像素
用結構元素與其覆蓋的二值圖像做「與」操作
如果都為0,結果圖像的該像素為0。否則為1
結果:使二值圖像擴大一圈
定義:E = B S = { x,y | Sxy∩B ≠Ф}
膨脹源碼
BOOL Dilation(HWND hWnd,BOOL Hori)
{
DWORD OffBits,BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;
//為了處理的方便,仍採用256級灰度圖,不過只調色板中0和255兩項
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",
"Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize為緩沖區大小
BufSize=OffBits+bi.biHeight*LineBytes;
//為新的緩沖區分配內存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//拷貝頭信息和點陣圖數據
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
//在水平方向進行膨脹運算
for(y=0;y<bi.biHeight;y++){
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;
lpTempPtr=(char*)lpTempImgData+
(BufSize-LineBytes-y*LineBytes)+1;
for(x=1;x<bi.biWidth-1;x++){
//注意為防止越界,x的范圍從1到寬度-2
num=(unsigned char)*lpPtr;
//原圖中是黑點的,新圖中肯定也是,所以要考慮的是那些原圖
//中的白點,看是否有可能膨脹成黑點
if (num==255){
*lpTempPtr=(unsigned char)255; //先置成白點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+i-1);
//只要左右鄰居中有一個是黑點,就膨脹成黑點
if(num==0){
*lpTempPtr=(unsigned char)0;
break;
}
}
}
//原圖中就是黑點的,新圖中仍是黑點
else *lpTempPtr=(unsigned char)0;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
else{
//在垂直方向進行腐蝕運算
for(y=1;y<bi.biHeight-1;y++){ //注意為防止越界,y的范圍從1到高度-2
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<bi.biWidth;x++){
num=(unsigned char)*lpPtr;
if (num==255){
*lpTempPtr=(unsigned char)255;
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+(i-1)*LineBytes);
//只要上下鄰居中有一個是黑點,就膨脹成黑點
if(num==0){
*lpTempPtr=(unsigned char)0;
break;
}
}
}
else *lpTempPtr=(unsigned char)0;
lpPtr++;
lpTempPtr++;
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//產生新的點陣圖
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,
(LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData,
DIB_RGB_COLORS);
//起不同的結果文件名
if(Hori)
hf=_lcreat("c:\\hdilation.bmp",0);
else
hf=_lcreat("c:\\vdilation.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//釋放內存及資源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
腐蝕源碼
BOOL Erosion(HWND hWnd,BOOL Hori)
{
DWORD OffBits,BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HLOCAL hTempImgData;
LPBITMAPINFOHEADER lpTempImgData;
LPSTR lpTempPtr;
HDC hDc;
HFILE hf;
LONG x,y;
unsigned char num;
int i;
//為了處理方便,仍採用256級灰度圖,不過只用調色板中0和255兩項
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!",
"Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
OffBits=bf.bfOffBits-sizeof(BITMAPFILEHEADER);
//BufSize為緩沖區大小
BufSize=OffBits+bi.biHeight*LineBytes;
//為新的緩沖區分配內存
if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)
{
MessageBox(hWnd,"Error alloc memory!","Error Message",
MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);
//拷貝頭信息和點陣圖數據
memcpy(lpTempImgData,lpImgData,BufSize);
if(Hori)
{
//在水平方向進行腐蝕運算
for(y=0;y<bi.biHeight;y++){
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes)+1;
lpTempPtr=(char*)lpTempImgData+
(BufSize-LineBytes-y*LineBytes)+1;
for(x=1;x<bi.biWidth-1;x++){
//注意為防止越界,x的范圍從1到寬度-2
num=(unsigned char)*lpPtr;
if (num==0){ //因為腐蝕掉的是黑點,所以只對黑點處理
*lpTempPtr=(unsigned char)0; //先置成黑點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+i-1);
if(num==255){
//自身及上下鄰居中若有一個不是黑點,則將該點腐
//蝕成白點
*lpTempPtr=(unsigned char)255;
break;
}
}
}
//原圖中就是白點的,新圖中仍是白點
else *lpTempPtr=(unsigned char)255;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
else{
//在垂直方向進行腐蝕運算
for(y=1;y<bi.biHeight-1;y++){ //注意為防止越界,y的范圍從1到高度-2
//lpPtr指向原圖數據,lpTempPtr指向新圖數據
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
lpTempPtr=(char *)lpTempImgData+(BufSize-LineBytes-y*LineBytes);
for(x=0;x<bi.biWidth;x++){
num=(unsigned char)*lpPtr;
if (num==0){ //因為腐蝕掉的是黑點,所以只對黑點處理
*lpTempPtr=(unsigned char)0; //先置成黑點
for(i=0;i<3;i++){
num=(unsigned char)*(lpPtr+(i-1)*LineBytes);
if(num==255){
//自身及上下鄰居中若有一個不是黑點,則將該點腐
//蝕成白點
*lpTempPtr=(unsigned char)255;
break;
}
}
}
//原圖中就是白點的,新圖中仍是白點
else *lpTempPtr=(unsigned char)255;
//指向下一個象素
lpPtr++;
lpTempPtr++;
}
}
}
if(hBitmap!=NULL)
DeleteObject(hBitmap);
hDc=GetDC(hWnd);
//產生新的點陣圖
hBitmap=CreateDIBitmap(hDc,(LPBITMAPINFOHEADER)lpTempImgData,
(LONG)CBM_INIT,
(LPSTR)lpTempImgData+
sizeof(BITMAPINFOHEADER)+
NumColors*sizeof(RGBQUAD),
(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);
//起不同的結果文件名
if(Hori)
hf=_lcreat("c:\\herosion.bmp",0);
else
hf=_lcreat("c:\\verosion.bmp",0);
_lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER));
_lwrite(hf,(LPSTR)lpTempImgData,BufSize);
_lclose(hf);
//釋放內存及資源
ReleaseDC(hWnd,hDc);
LocalUnlock(hTempImgData);
LocalFree(hTempImgData);
GlobalUnlock(hImgData);
return TRUE;
}
F. 圖像膨脹腐蝕演算法原理
膨脹和腐蝕的主要用途:
消除雜訊;
分割出獨立的圖像元素,在圖像中連接相鄰的元素;
尋找圖像中明顯的極大值或極小值區;
求出圖像的梯度;
【注】:
腐蝕和膨脹是對像素值大的部分而言的,即高亮白部分而不是黑色部分;
膨脹是圖像中的高亮部分進行膨脹,領域擴張,效果圖擁有比原圖更大的高亮區域;
腐蝕是圖像中的高亮部分被腐蝕掉,領域縮減,效果圖擁有比原圖更小的高亮區域;
2
/9
膨脹原理:
膨脹:求局部最大值;
①定義一個卷積核B,
核可以是任何的形狀和大小,且擁有一個單獨定義出來的參考點-錨點(anchorpoint);
通常和為帶參考點的正方形或者圓盤,可將核稱為模板或掩膜;
②將核B與圖像A進行卷積,計算核B覆蓋區域的像素點最大值;
③將這個最大值賦值給參考點指定的像素;
因此,圖像中的高亮區域逐漸增長。
3
/9
腐蝕原理:
腐蝕:局部最小值(與膨脹相反);
①定義一個卷積核B,
核可以是任何的形狀和大小,且擁有一個單獨定義出來的參考點-錨點(anchorpoint);
通常和為帶參考點的正方形或者圓盤,可將核稱為模板或掩膜;
②將核B與圖像A進行卷積,計算核B覆蓋區域的像素點最小值;
③將這個最小值賦值給參考點指定的像素;
因此,圖像中的高亮區域逐漸減小。
4
/9
OpenCV中膨脹函數-dilate()
格式:
void dilate(
InputArray src,//輸入
OutputArray dst, //輸出
InputArray kernel, //核大小
Point anchor=Point(-1,-1),// 錨位置,(-1,-1)為中心
int iterations=1, //迭代次數
int borderType=BORDER_CONSTANT,//圖像邊界像素模式
const Scalar& borderValue=morphologyDefaultBorderValue()//邊界值
)
【注】:
關於核,一般配合getStructuringElement()使用;
getStructuringElement():返回指定形狀和尺寸的結構元素;
格式:
getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1));
參數:
shape:表核的形狀,矩形MORPH_RECT;交叉形MORPH_CROSS;橢圓形MORPH_ELLIPSE;
ksize:核尺寸大小;
anchor:錨點的位置,錨點隻影響形態學運算結果的偏移;
5
/9
OpenCV中腐蝕函數-erode()
格式:
void erode(
InputArray src,//輸入
OutputArray dst, //輸出
InputArray kernel, //核大小
Point anchor=Point(-1,-1),// 錨位置,(-1,-1)為中心
int iterations=1, //迭代次數
int borderType=BORDER_CONSTANT,//圖像邊界像素模式
const Scalar& borderValue=morphologyDefaultBorderValue()//邊界值
)
6
/9
形態學開運算:
開運算(Open Operation):先腐蝕後膨脹的過程;
功能:
消除小物體;
在纖細處分離物體;
平滑較大的邊界並不明顯改變其面積;
7
/9
形態學閉運算:
閉運算(Closing Openration),先膨脹後腐蝕;
功能:
排除小型黑洞(黑斑);
8
/9
OpenCV:morphologyEx()
功能:morphologyEx函數利用基本的膨脹和腐蝕技術,來執行更加高級形態學變換,
如開閉運算,形態學梯度,「頂帽」、「黑帽」等等。
G. 圖像處理中的腐蝕與膨脹是什麼意思
圖像處理分為多種,對於不同的圖像腐蝕和膨脹的定義不同。
1、形態學圖像處理是在圖像中移動一個結構元素,然後將結構元素與下面的二值圖像進行交、並等集合運算;先腐蝕後膨脹的過程稱為開運算。
它具有消除細小物體,在纖細處分離物體和平滑較大物體邊界的作用。先膨脹後腐蝕的過程稱為閉運算。它具有填充物體內細小空洞,連接鄰近物體和平滑邊界的作用。
2、對灰度圖像的膨脹(或腐蝕)操作有兩類效果:
(1)如果結構元素的值都為正的,則輸出圖像會比輸入圖像亮(或暗);
(2)根據輸入圖像中暗(或亮)細節的灰度值以及它們的形狀相對於結構元素的關系,它們在運算中或被消減或被除掉。
腐蝕就是使用演算法,將圖像的邊緣腐蝕掉。作用就是將目標的邊緣的「毛刺」踢除掉。
膨脹就是使用演算法,將圖像的邊緣擴大些。作用就是將目標的邊緣或者是內部的坑填掉。
使用相同次數的腐蝕與膨脹,可以使目標表面更平滑。
(7)腐蝕文字演算法擴展閱讀:
1、圖像變換:由於圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。因此,往往採用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散餘弦變換等間接處理技術,將空間域的處理轉換為變換域處理,不僅可減少計算量,而且可獲得更有效的處理。
目前新興研究的小波變換在時域和頻域中都具有良好的局部化特性,它在圖像處理中也有著廣泛而有效的應用。
2、圖像編碼壓縮:圖像編碼壓縮技術可減少描述圖像的數據量(即比特數),以便節省圖像傳輸、處理時間和減少所佔用的存儲器容量。
壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。編碼是壓縮技術中最重要的方法,它在圖像處理技術中是發展最早且比較成熟的技術。
3、圖像增強和復原:圖像增強和復原的目的是為了提高圖像的質量,如去除雜訊,提高圖像的清晰度等。圖像增強不考慮圖像降質的原因,突出圖像中所感興趣的部分。
如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節明顯;如強化低頻分量可減少圖像中雜訊影響。圖像復原要求對圖像降質的原因有一定的了解,一般講應根據降質過程建立「降質模型」,再採用某種濾波方法,恢復或重建原來的圖像
參考資料來源:網路-圖像處理
H. 如何在金屬上腐蝕字,用什麼葯水,以及它的程序
(1)金屬銅上腐蝕字,用三氯化鐵水溶液!
(2)程序:銅塗蠟,字跡刻穿,三氯化鐵水溶液浸泡!
I. 電腐蝕標牌的價錢怎麼算的
腐蝕標牌的演算法在全國都是長*寬(厘米)*0.05就出來一塊牌的單價了,實際上就是五分一平方厘米,五百一平方米了,這是不銹鋼鈦金腐蝕牌的價格,如果是鋁牌的話就用長*寬(厘米)*0.03就算出來了,實際就是三分一平方厘米,三百一平方米了。
至於你說的電蝕刻沒有正規的標牌廠用電蝕刻機來腐蝕標牌的,蝕刻面不均勻,大面積腐蝕速度慢,不能用於量產,也不能做凸字大面積蝕刻,不能用做標牌的大批量生產加工。由於電解蝕刻是在金屬導電的情況下形成蝕刻的,那麼我們的產品在蝕刻下去有任何的深度時側面也將被蝕刻的,這樣很多精細圖案,精細文字將被蝕刻」爛「掉,只有那些賣電蝕刻設備的才誇大它的功能。
J. 如何在金屬上腐蝕字,用什麼葯水,以及它的程序
金屬銅上腐蝕字,用三氯化鐵水溶液。
程序:
在金屬表面用油漆寫陰文(就是沒有文字的地方用油漆塗滿,有文字的地方裸露金屬,特別注意:這里說的沒有文字的地方,包括金屬的背面和側面)。等待油漆干透。
在一個不銹鋼(或其它耐酸的材質)容器中到入稀硫酸或是稀鹽酸,或是稀硝酸,酸的量已能淹沒金屬為宜。將塗了油漆的金屬放入稀硫酸或稀鹽酸或稀硝酸中。
裸露部分的金屬與酸接觸,就會被腐蝕。注意觀察腐蝕的深度,當達到樓主的要求時,將金屬取出。用水沖洗金屬,將粘附在表面的酸完全洗凈。去掉表面的油漆。
(10)腐蝕文字演算法擴展閱讀:
金屬腐蝕的防護主要方法:
①改變金屬的內部結構。例如,把鉻、鎳加入普通鋼中製成不銹鋼。
②在金屬表面覆蓋保護層。例如,在金屬表面塗漆、電鍍或用化學方法形成緻密耐腐蝕的氧化膜等。
③電化學保護法。因為金屬單質不能得電子,只要把被保護的金屬做電化學裝置發生還原反應的一極——陰極,就能使引起金屬電化腐蝕的原電池反應消除。具體方法有:
a.外加電流的陰極保護法。利用電解裝置,使被保護的金屬與電源負極相連,另外用惰性電極做陽極,只要外加電壓足夠強,就可使被保護的金屬不被腐蝕。
b.犧牲陽極的陰極保護法。利用原電池裝置,使被保護的金屬與另一種更易失電子的金屬組成新的原電池。發生原電池反應時,原金屬做正極(即陰極),被保護,被腐蝕的是外加活潑金屬——負極(即陽極)。此外,還有加緩蝕劑等方法,減緩或防止金屬被腐蝕。