@ラベリング限定表示 --track0:G閾値,0,255,128,1 --track1:A閾値,0,255,254,1 --track2:Frame,0,9999,0,1 --track3:境界B,0,100,1,1 --check0:アルファチャンネル処理,0 --dialog:精度係数[ >0 ],local rep=1;規則表示/chk,chk1=1;SEED,local sd=100; ------------------------------------set local t0=math.floor(obj.track0) local t1=math.floor(obj.track1) local t2=math.floor(obj.track2) local t3=math.floor(obj.track3) local sw=obj.screen_w local sh=obj.screen_h local ow,oh=obj.getpixel() local ogvzm=obj.getvalue("zoom")*0.01 local fs=sh/24 obj.setfont("",fs) ------------------------------------ local vxl = {-1,0,1,-1} local vyl = {-1,-1,-1,0} local len = ow*oh-1 local labelNum = {} local colist = {} local alpha = {} local src = {} local dst = {} ------------------------------------ local labelId = 0 ------------------------------------ for i=0,len do labelNum[i+1] = 0 x0 = i % ow y0 = math.floor(i / ow) r,g,b,alpha[i + 1] = obj.getpixel(x0,y0,"rgb") colist[i+1] = RGB(r,g,b) if(alpha[i + 1] > t1)then if(math.floor((r + g + b) * 0.333333333 + 0.5) > t0)then --script start minId = labelId sum = 0 --周辺最小値-> dstの最小値取得と孤立確認 for j=1,4 do if(0 <= vxl[j] + x0 and vxl[j] + x0 < ow and 0 <=vyl[j] + y0 and vyl[j] + y0 < oh)then tmp = vxl[j] + x0 + (vyl[j] + y0) * ow +1 if(labelNum[tmp] ~= null and labelNum[tmp] > 0)then if(minId > dst[ labelNum[tmp] ])then --*** minId = dst [ labelNum[tmp] ] --*** end sum = sum + 1 end end end --孤立確認ラベルUP&最小値(dst)関連付け if(sum == 0)then labelId = labelId +1 src[labelId] = labelId dst[labelId] = labelId else --隣接dst最小値設定 for j=1,4 do if(0 <= vxl[j] + x0 and vxl[j] + x0 < ow and 0 <=vyl[j] + y0 and vyl[j] + y0 < oh)then tmp = vxl[j] + x0 + (vyl[j] + y0) * ow +1 if(labelNum[tmp] ~= null and labelNum[tmp] > 0)then if(dst[ labelNum[tmp] ] > minId)then --*** dst[ labelNum[tmp] ] = minId --*** end end end end end --現地点最小値設定 labelNum[i+1] = minId --script end end end end --補正処理1 local rep = math.ceil(labelId * 0.1 * rep) if(rep < 1)then rep = 1 end for j=1,rep do for i=1,labelId do dst[i] = dst[ dst[i] ] end end --補正処理2 local NumTotal = {} for i=1,#dst do if(NumTotal[ dst[i] ] == null)then NumTotal[ dst[i] ] = 0 end NumTotal[ dst[i] ] = NumTotal[ dst[i] ] +1 end --補正処理3 local NumSeisu = {} local tidx = 0 for i=1,labelId-1 do if(NumTotal[i] ~= null)then tidx = tidx + 1 NumSeisu[i] = tidx end end --obj.pixeloption("type","rgb") for i=0,len do if(labelNum[i+1] > 0)then if(labelNum[i+1] == src[ labelNum[i+1] ])then labelNum[i+1] = dst[ labelNum[i+1] ] end labelNum[i+1] = NumSeisu[ labelNum[i+1] ] if(chk1 == 1)then n = t2 % #NumSeisu + 1 else n = obj.rand(1,#NumSeisu,sd,t2) end if(labelNum[i+1] ~= n)then x0 = i % ow y0 = math.floor(i / ow) a = alpha[i+1] / 255 obj.putpixel(x0,y0,colist[i+1],a) else x0 = i % ow y0 = math.floor(i / ow) a = alpha[i+1] / 255 obj.putpixel(x0,y0,colist[i+1],1-a) end end end if(obj.check0)then obj.effect("反転","透明度反転",1) obj.effect("境界ぼかし","範囲",t3,"透明度の境界をぼかす",1) else obj.effect("境界ぼかし","範囲",t3,"透明度の境界をぼかす",1) end @ラベリング着色 --track0:G閾値,0,255,128,1 --track1:A閾値,0,255,96,1 --track2:Frame,0,9999,0,1 --track3:明度,0,100,50,1 --check0:アルファチャンネル処理,0 --dialog:精度係数[ >0 ],local rep=1;領域色並び/chk,chk1=1;限定表示/chk,chk2=0;独立数,local objN=7;変化速度,local spd=10;表示番号,dsp=math.floor(spd*obj.time)%objN+1;SEED,local sd=100; ------------------------------------set local t0=math.floor(obj.track0) local t1=math.floor(obj.track1) local t2=math.floor(obj.track2) local t3=math.floor(obj.track3) local sw=obj.screen_w local sh=obj.screen_h local ow,oh=obj.getpixel() local ogvzm=obj.getvalue("zoom")*0.01 local fs=sh/24 obj.setfont("",fs) ------------------------------------ local vxl = {-1,0,1,-1} local vyl = {-1,-1,-1,0} local len = ow*oh-1 local labelNum = {} local alpha = {} local src = {} local dst = {} ------------------------------------ local labelId = 0 ------------------------------------ for i=0,len do labelNum[i+1] = 0 x0 = i % ow y0 = math.floor(i / ow) r,g,b,alpha[i + 1] = obj.getpixel(x0,y0,"rgb") if(alpha[i + 1] > t1)then if(math.floor((r + g + b) * 0.333333333 + 0.5) > t0)then --script start minId = labelId sum = 0 --周辺最小値-> dstの最小値取得と孤立確認 for j=1,4 do if(0 <= vxl[j] + x0 and vxl[j] + x0 < ow and 0 <=vyl[j] + y0 and vyl[j] + y0 < oh)then tmp = vxl[j] + x0 + (vyl[j] + y0) * ow +1 if(labelNum[tmp] ~= null and labelNum[tmp] > 0)then if(minId > dst[ labelNum[tmp] ])then --*** minId = dst [ labelNum[tmp] ] --*** end sum = sum + 1 end end end --孤立確認ラベルUP&最小値(dst)関連付け if(sum == 0)then labelId = labelId +1 src[labelId] = labelId dst[labelId] = labelId else --隣接dst最小値設定 for j=1,4 do if(0 <= vxl[j] + x0 and vxl[j] + x0 < ow and 0 <=vyl[j] + y0 and vyl[j] + y0 < oh)then tmp = vxl[j] + x0 + (vyl[j] + y0) * ow +1 if(labelNum[tmp] ~= null and labelNum[tmp] > 0)then if(dst[ labelNum[tmp] ] > minId)then --*** dst[ labelNum[tmp] ] = minId --*** end end end end end --現地点最小値設定 labelNum[i+1] = minId --script end end end end --補正処理1 local rep = math.ceil(labelId * 0.1 * rep) if(rep < 1)then rep = 1 end for j=1,rep do for i=1,labelId do dst[i] = dst[ dst[i] ] end end --補正処理2 local NumTotal = {} for i=1,#dst do if(NumTotal[ dst[i] ] == null)then NumTotal[ dst[i] ] = 0 end NumTotal[ dst[i] ] = NumTotal[ dst[i] ] +1 end --補正処理3 local NumSeisu = {} local tidx = 0 for i=1,labelId-1 do if(NumTotal[i] ~= null)then tidx = tidx + 1 NumSeisu[i] = tidx end end obj.pixeloption("type","rgb") for i=0,len do if(labelNum[i+1] > 0)then if(labelNum[i+1] == src[ labelNum[i+1] ])then labelNum[i+1] = dst[ labelNum[i+1] ] end labelNum[i+1] = NumSeisu[ labelNum[i+1] ] if(chk1 == 1)then h = obj.rand(0,359,sd,labelNum[i+1] +t2) else h = math.floor((labelNum[i+1]-1 + t2) / labelId * 360 +0.5) % 360 end r,g,b = RGB(HSV(h,t3,100)) if(obj.check0)then a = 255 - alpha[i+1] else a = alpha[i+1] end x0 = i % ow y0 = math.floor(i / ow) if(chk2 == 0)then obj.putpixel(x0,y0,r,g,b,a) else if(labelNum[i+1] == dsp)then obj.putpixel(x0,y0,r,g,b,a) end end end end if(obj.check0)then obj.effect("反転","透明度反転",1) end --[[http://madeinpc.blog50.fc2.com/]]--