main
Jan-Niclas Loosen 8 months ago
parent 895855ea61
commit 3a520b8f97

@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/Virtualenv" />
</content>
<orderEntry type="jdk" jdkName="C:\Users\janni\anaconda3" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="C:\ProgramData\anaconda3" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="C:\Users\janni\anaconda3" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="C:\ProgramData\anaconda3" project-jdk-type="Python SDK" />
</project>

@ -5,9 +5,10 @@
</component>
<component name="ChangeListManager">
<list default="true" id="42ed9a51-9564-48c5-b5fa-035301b1578d" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/ha_09/loosen_janniclas_1540907_10.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/UNI_Python.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/UNI_Python.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ext_01/control.py" beforeDir="false" afterPath="$PROJECT_DIR$/ext_01/control.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ha_09/loosen_janniclas_1540907_10.py" beforeDir="false" afterPath="$PROJECT_DIR$/ha_09/loosen_janniclas_1540907_10.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -165,10 +166,21 @@
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/ha_08/loosen_janniclas_1540907_09.py</url>
<line>63</line>
<option name="timeStamp" value="1" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_09__1_.coverage" NAME="loosen_janniclas_1540907_09 (1) Coverage Results" MODIFIED="1704717881190" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_08" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_10.coverage" NAME="loosen_janniclas_1540907_10 Coverage Results" MODIFIED="1705436313201" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_09" />
<SUITE FILE_PATH="coverage/UNI_Python$control.coverage" NAME="control Coverage Results" MODIFIED="1705421841538" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ext_01" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_10.coverage" NAME="loosen_janniclas_1540907_10 Coverage Results" MODIFIED="1705438650599" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_09" />
<SUITE FILE_PATH="coverage/UNI_Python$control.coverage" NAME="control Coverage Results" MODIFIED="1705244854276" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ext_01" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_09.coverage" NAME="loosen_janniclas_1540907_09 Coverage Results" MODIFIED="1704711219437" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_08" />
</component>
</project>

@ -69,22 +69,31 @@ FLAG_gauss = 0
FLAG_uniform = 1
def process_image_part(data_part, kernel):
def process_image_part(data_part, kernel, padding):
y_part_size, x_part_size, _ = data_part.shape
data_part_new = np.zeros_like(data_part)
for i in range((kernel.shape[0] - 1) // 2, y_part_size - (kernel.shape[0] - 1) // 2):
for j in range((kernel.shape[1] - 1) // 2, x_part_size - (kernel.shape[1] - 1) // 2):
data_part_new = np.zeros((data_part.shape[0] - padding[0], data_part.shape[1] - padding[1], 3))
pad_y, pad_x = padding
for i in range(pad_y, y_part_size - pad_y):
for j in range(pad_x, x_part_size - pad_x):
for k in range(3):
new_value = 0.0
for ii in range(kernel.shape[0]):
for jj in range(kernel.shape[1]):
iii = ii - (kernel.shape[0] - 1) // 2
jjj = jj - (kernel.shape[1] - 1) // 2
iii = ii - pad_y
jjj = jj - pad_x
new_value += kernel[ii, jj] * data_part[i + iii, j + jjj, k]
data_part_new[i, j, k] = new_value
data_part_new[i - pad_y, j - pad_x, k] = new_value
return data_part_new
def split_array(arr, n, overlap):
sub_array_length = (len(arr) + (n - 1) * overlap) // n
sub_arrays = [arr[i * (sub_array_length - overlap): i * (sub_array_length - overlap) + sub_array_length] for i in range(n)]
return np.array(sub_arrays)
def process_image(img, func=0, mode=0):
if isinstance(img, str):
img = Image.open(img)
@ -95,15 +104,19 @@ def process_image(img, func=0, mode=0):
data = np.asarray(img, dtype=np.float64) / 255.0
if func == 1:
kernel = uniform_kernel(3)
kernel = uniform_kernel(7)
else:
kernel = gauss_kernel(3)
padding = [(kernel.shape[0] // 2), kernel.shape[1] // 2]
if mode == 1: # Multithreading mode
num_threads = 16
data_parts = np.array_split(data, num_threads, axis=0)
data_parts = split_array(data, num_threads, padding[0])
with multiprocessing.Pool(num_threads) as pool:
data_new_parts = pool.starmap(process_image_part, zip(data_parts, [kernel]*num_threads))
data_new_parts = pool.starmap(process_image_part, zip(data_parts, [kernel]*num_threads, [padding]*num_threads))
data_new = np.concatenate(data_new_parts, axis=0)
elif mode == 2: # MPI parallel mode
@ -111,7 +124,7 @@ def process_image(img, func=0, mode=0):
rank = comm.Get_rank()
size = comm.Get_size()
data_part = np.array_split(data, size, axis=0)[rank]
data_new_part = process_image_part(data_part, kernel)
data_new_part = process_image_part(data_part, kernel, padding)
data_new_parts = comm.gather(data_new_part, root=0)
if rank == 0:
data_new = np.concatenate(data_new_parts, axis=0)
@ -120,7 +133,7 @@ def process_image(img, func=0, mode=0):
data_new = comm.bcast(data_new, root=0)
else: # Default mode
data_new = process_image_part(data, kernel)
data_new = process_image_part(data, kernel, padding)
data_new = data_new * 255.0
data_new = np.uint8(data_new)
@ -128,6 +141,7 @@ def process_image(img, func=0, mode=0):
return Image.fromarray(data_new, mode="RGB")
if __name__ == '__main__':
print(monte_carlo_methode(1000, FLAG_default))
print(monte_carlo_methode(1000, FLAG_threaded))

Loading…
Cancel
Save