首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError: append()不接受关键字参数-用于多处理的Python代码,用于获取图像的分形维

TypeError: append()不接受关键字参数-用于多处理的Python代码,用于获取图像的分形维
EN

Stack Overflow用户
提问于 2021-10-10 15:19:15
回答 1查看 337关注 0票数 0

我目前正在做一个项目,使多处理分形维数计算程序。

我设计了代码,以便它首先将大图像分割为9个部分,并计算每个部分的分形维数。

代码语言:javascript
运行
复制
from multiprocessing import process
import numpy as np
import os
import math as mt   
import cv2
import imageio
import warnings
from PIL import Image
warnings.simplefilter('ignore', Image.DecompressionBombWarning)
Image.MAX_IMAGE_PIXELS = None
def fractal_dimension(Z, threshold=0.8):
"""Returns box-counting dimension of a 2D array.
    Args:
        Z: 2D array to be analysed.
        threshold: Cutoff for converting values in Z to 1 and 0.
    Returns:
        The estimated box counting dimension.
"""

    # Only for 2d image
    assert(len(Z.shape) == 2)
    # From https://github.com/rougier/numpy-100 (#87)
    def boxcount(Z, k):
        S = np.add.reduceat(
            np.add.reduceat(Z, np.arange(0, Z.shape[0], k), axis=0),
                               np.arange(0, Z.shape[1], k), axis=1)
        # We count non-empty (0) and non-full boxes (k*k)
        return len(np.where((S > 0) & (S < k*k))[0])
    # Transform Z into a binary array
    Z = (Z < threshold)
    # Minimal dimension of image
    p = min(Z.shape)
    # Greatest power of 2 less than or equal to p
    n = 2**np.floor(np.log(p)/np.log(2))
    # Extract the exponent
    n = int(np.log(n)/np.log(2))
    # Build successive box sizes (from 2**n down to 2**1)
    sizes = 2**np.arange(n, 1, -1)
    # Actual box counting with decreasing size
    counts = []
    for size in sizes:
        counts.append(boxcount(Z, size))
    # Fit the successive log(sizes) with log (counts)
    coeffs = np.polyfit(np.log(sizes), np.log(counts), 1)
    #fracd.append(coeffs)
    return -coeffs[0]

I = imageio.imread(r"C:\Users\qkrgn\PycharmProjects\pythonProject\Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg", as_gray="True")/255.0    # Import the image in greyscale
print("Minkowski–Bouligand dimension (computed): ", fractal_dimension(I))

subset_9t1 = I[::3, ::3]
subset_9t2 = I[1::3, ::3]
subset_9t3 = I[2::3, ::3]
subset_9t4 = I[::3, 1::3]
subset_9t5 = I[1::3, 1::3]
subset_9t6 = I[2::3, 1::3]
subset_9t7 = I[::3, 2::3]
subset_9t8 = I[1::3, 2::3]
subset_9t9 = I[2::3, 2::3]
if __name__ =='__main__':

    processes:list = []

    processes.append(target=fractal_dimension, args=subset_9t1)
    processes.append(target=fractal_dimension, args=subset_9t2)
    processes.append(target=fractal_dimension, args=subset_9t3)
    processes.append(target=fractal_dimension, args=subset_9t4)
    processes.append(target=fractal_dimension, args=subset_9t5)
    processes.append(target=fractal_dimension, args=subset_9t6)
    processes.append(target=fractal_dimension, args=subset_9t7)
    processes.append(target=fractal_dimension, args=subset_9t8)
    processes.append(target=fractal_dimension, args=subset_9t9)
    
for process in processes:
    process.start()

print(sum(fracd, 0.000)/len(fracd))

错误代码为:

代码语言:javascript
运行
复制
traceback (most recent call last):
  File "C:/Users/qkrgn/PycharmProjects/pythonProject/main.py", line 141, in <module>
    processes.append(target=fractal_dimension, args=subset_9t1)
TypeError: append() takes no keyword arguments

我想知道为什么会出现这个错误以及如何修复它。拆分图像来计算分形维数,然后将它们组合起来得到分形维数是否会有任何问题。

EN

回答 1

Stack Overflow用户

发布于 2021-10-10 15:26:27

你应该这样做,而不是你实际在做的事情。

代码语言:javascript
运行
复制
from multiprocessing import Process

# make this change for all the times you tried to append it while using the earlier way.
processes.append(Process(target=fractal_dimension, args=[subset_9t1]))

你正在传递的关键字参数对于append函数来说是不存在的,这是你不想做的。

此外,您可以使用for循环,而不是手动输入这些append

代码语言:javascript
运行
复制
if __name__ == '__main__':
    VARIABLE_NAME = "subset_9t"
    
    for i in range(1, 10):
        p = Process(target=fractal_dimension, args=[eval(VARIABLE_NAME + str(i))])
        processes.append(p)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69516472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档