🌟

画像のノイズ除去をしたら、すごい効果が!!

に公開

生成AIの画像生成によって生成された画像が少し画質が荒かったので、品質を上げたいと思い、調べてみました。

色々試した結果、ノイズ除去を行うと、すごくきれいになったので、それについての報告です。

もともと、アップスケールしたらきれいになるだろうと、アップスケールをするためのコードを作成していましたが、アップスケールは、あまりきれいになりませんでした。

ただ、汚いものが、より大きくなっただけでした。

その後、調べると、ノイズ除去をするときれいになるという記事を発見し、それをしてみることにしました。

AIにノイズ除去のコードを書いてもらい、実際にやってみると、

思った以上の効果を得ることができましたので、記事にしました。

import cv2
import os

def process_images_in_folder(input_folder_path):
    
    """
    指定されたフォルダ内のすべての画像にバイラテラルフィルタを適用し、
    結果を新しいフォルダに保存します。
    """
    # 出力フォルダのパスを生成
    parent_dir = os.path.dirname(input_folder_path)
    if not parent_dir:
        parent_dir = "."
    output_folder_path = os.path.join(parent_dir, "output_folder")

    # 出力フォルダが存在しない場合は作成
    if not os.path.exists(output_folder_path):
        os.makedirs(output_folder_path)
        print(f"Created output folder: {output_folder_path}")

    # サポートされている画像拡張子のリスト
    image_extensions = ('.png', '.jpg', '.jpeg', '.bmp', '.gif')

    # フォルダ内のすべてのファイルを反復処理
    processed_count = 0
    for filename in os.listdir(input_folder_path):
        if filename.lower().endswith(image_extensions):
            input_image_path = os.path.join(input_folder_path, filename)

            # 画像の読み込み
            image = cv2.imread(input_image_path)

            if image is None:
                print(f"Warning: Could not read image {input_image_path}. Skipping.")
                continue

            # バイラテラルフィルタを適用
            denoised_image = cv2.bilateralFilter(image, d=7, sigmaColor=50, sigmaSpace=50)

            # 出力ファイルのパスを生成
            output_image_path = os.path.join(output_folder_path, filename)

            # ノイズ除去後の画像を保存
            cv2.imwrite(output_image_path, denoised_image)
            print(f"Processed and saved: {output_image_path}")
            processed_count += 1
    
    if processed_count == 0:
        print("No supported image files were found in the specified folder.")
    else:
        print(f"\nAll image processing completed. {processed_count} files processed.")

# ユーザーにフォルダパスの入力を求める
input_folder_path = input("処理したいフォルダのフルパスを入力してください: ")
input_folder_path = input_folder_path.strip('"')

# 入力されたパスを検証し、処理を実行
if os.path.isdir(input_folder_path):
    process_images_in_folder(input_folder_path)
else:
    print(f"Error: The provided path is not a valid directory: {input_folder_path}")

pythonをインストールしていない場合はインストールしてください。
その後、

pip install opencv-python

をコンソールで実行してください。(コマンドプロンプト)

その後、upscale.pyで上記のコードを保存し、そのフォルダで、コマンドプロンプトを開き、python upscale.pyで実行できます。

変換する画像のあるフォルダを聞かれるので、フルパスを入力しエンター。
変換するフォルダと同じところに変換された画像のフォルダが作成されます。

Discussion