討論區快速選單
知識庫快速選單
討論區最近新進100則主題 網路投保旅行平安險 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
二值化圖片 區塊標籤化問題
更改我的閱讀文章字型大小
作者 : zhou72911(小瑋)
[ 貼文 8 | 人氣 2518 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/19 下午 01:09:57
我使用VC++6.0程式
程式上我已將二值化影像上的區塊做好標籤了
例如下面是我的一張影像 數字不為0地方是白點(圖案區塊) 數字為0地方是黑點

假設影像大小240*320,在此只列出中間的子影像,其餘Pixel的皆是0省略

 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 0 0
 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2
 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 3 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 3 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 3 0 0 3 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 3 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 4 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0
 4 0 5 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 8 8 0 0 0 0 0
 4 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 0 9 9 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0

接下來我要將連在一起但標籤不一樣的區塊
如{4,5,6},{7,8,9}
換成一樣的標籤,下面是我使用的"測試"程式

程式如下:
#include <stdio.h>

int t=0;
short TEMP[240][320] = {0}; //假設為二值化影像的data

void mask(int i, int j, int n)
{
if (TEMP[j][i] == 0 || (TEMP[j][i] & 0x8000)) //若Pixel是0或是已處理則過程式就跳出
return;

if( (t-2) %3 == 0 && t != 0 )
printf("(i,j,n,t)=(%d,%d,%d,%d)\n",i,j,n,t);
else
printf("(i,j,n,t)=(%d,%d,%d,%d) ",i,j,n,t);

t++;

TEMP[j][i] = n | 0x8000; //處理過就加上0X8000

if (i % 320 - 1 >= 0) mask(i - 1, j , n);
if (i % 320 + 1 < 320) mask(i + 1, j , n);
if (j % 240 - 1 >= 0) mask(i , j - 1, n);
if (j % 240 + 1 < 240) mask(i , j + 1, n);
}

void main()
{
int i=0,j=0,n = 0;;

for (j=0; j<240; j++)
{
for(i=0; i<320; i++)
{
if( i >= 20 && i <=219 && j >= 20 && j <=219 )
TEMP[j][i] = 255;
}
}

for (j=0; j<240; j++)
{
for(i=0; i<320; i++)
{
if (TEMP[j][i] != 0 && !(TEMP[j][i] & 0x8000))
mask(i, j, ++n);
}
}
printf("結束\n");
}

在此會出現奇怪問題
若是影像中白色區塊面積很小時 上面程式是可以執行完的 且結果正確
但若白色區太大如200*200時程式在mask()裡執行到一半就結束了

DOS視窗直接出現

" Press any key to continue "

我想問這是怎麼一回事?
且有其它方式可以將相連區塊標籤化一致的方法嗎?

謝謝各問

作者 : zhou72911(小瑋)
[ 貼文 8 | 人氣 2518 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/9/20 下午 12:26:38
上面假設的影像在程式中是可以執行完的,且結果正確
下面"測試"程式我已將影像data換成200*200大小的白色區塊
但程式跑到一半自己就結束了

希望大家幫我看一看哪出了問題 我找很久都找不到
拜託 感謝各位
作者 : clonn(FreeMan)
[ 貼文 7 | 人氣 545 | 評價 50 | 評價/貼文 7.14 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/10/9 上午 12:52:46
QRS
TPX
XXX

(XX表示沒有東西)

可以參考以下的演算法

pass1: (scanning)

if P = 0 (white pixel), scan next pixel if P = 1 (dark pixel),
if all {Q, R, S, T} = 0, set P a new label
if only one of {Q, R, S, T} = 1,

set L(P) = L(x), where x = 1 and x﹃Q, R, S, T}

if more than one of {Q, R, S, T} = 1,

set L(P) = L(x), where x = 1, x﹃Q, R, S, T} and mark L(y) = L(x) for all other y = 1 and y﹃Q, R, S, T}

pass2: (merging classes)

merge all equivalent classes

我是從別人的論文那邊轉過來的
是從google那邊搜尋到的資料啦
作者 : clonn(FreeMan)
[ 貼文 7 | 人氣 545 | 評價 50 | 評價/貼文 7.14 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人zhou72911註記此篇回應為最佳解答 2007/10/9 上午 12:53:05
QRS
TPX
XXX

(XX表示沒有東西)

可以參考以下的演算法

pass1: (scanning)

if P = 0 (white pixel), scan next pixel if P = 1 (dark pixel),
if all {Q, R, S, T} = 0, set P a new label
if only one of {Q, R, S, T} = 1,

set L(P) = L(x), where x = 1 and x﹃Q, R, S, T}

if more than one of {Q, R, S, T} = 1,

set L(P) = L(x), where x = 1, x﹃Q, R, S, T} and mark L(y) = L(x) for all other y = 1 and y﹃Q, R, S, T}

pass2: (merging classes)

merge all equivalent classes

我是從別人的論文那邊轉過來的
是從google那邊搜尋到的資料啦
 板主 : 徵求中
 > 影像處理與計算機圖學 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 影像處理與計算機圖學 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
影像處理與計算機圖學
1 Linkin 780 
2 CrazyStar 400 
3 青衫 360 
4 白老鼠(Gary) 330 
5 悠悠深藍 220 
6 none 220 
7 shou 200 
8 ultra 200 
9 ghost 140 
10 ozzy 130 
影像處理與計算機圖學
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.046875