Files
digital-image-processing/8/2/Basic_operation.py
T
2024-05-23 10:50:05 +08:00

89 lines
2.0 KiB
Python

# 统计各灰度值的像素个数
def histogram(image):
(row, col) = image.shape
hist = [0]*256
for i in range(row):
for j in range(col):
hist[image[i, j]] += 1
return hist
#MODE=0自适应阈值(算术平均法)二值化,MODE=ture,自定义阈值二值化
def thresholding(im,T=128,L=255,MODE=0):
[m,n]=im.shape
img=im.copy()
if MODE==0:
list = histogram(img)
for i in range(len(list)):
list[i]=list[i]/(m*n)
dT=1
while dT>=0.5:
T1=0
T2=0
t=T
for i in range(floor(T)):
T1+=list[i]*i
for i in range(floor(T)+1,256,1):
T2+=list[i]*i
T=(T1+T2)/2
dT=abs(T-t)
for i in range(m):
for j in range(n):
if img[i,j]>=T:
img[i,j]=L
else:
img[i,j]=0
return img
#多图像加运算并取平均
def add(list):#list=[im1,im2,im3,...,imn],list为三维列表
img=np.zeros([list.shape[1],list.shape[2]])
for i in range(list.shape[0]):
img+=list[i]
img=img/list.shape[0]
return img
#减运算im1-im2
def reduce(im1,im2):
img=im1-im2
return img
#乘运算
def multiply(im1,im2):
img=im1.copy()
for i in range(im1.shape[0]):
for j in range(im1.shape[1]):
img[i,j]=im1[i,j]*im2[i,j]
return img
#除运算,im1/im2
def divide(im1,im2):
img=im1/im2
return img
#与运算
def img_and(im1,im2,L=255):
img=np.zeros([im1.shape[0],im1.shape[1]])
for i in range(im1.shape[0]):
for j in range(im1.shape[1]):
if(im1[i,j] and im2[i,j]):
img[i,j] = L
else:
img[i,j] = 0
return img
#或运算
def img_or(im1,im2,L=255):
img=np.zeros([im1.shape[0],im1.shape[1]])
for i in range(im1.shape[0]):
for j in range(im1.shape[1]):
if(im1[i,j] or im2[i,j]):
img[i,j] = L
else:
img[i,j] = 0
return img