実験3:画像変換(デジタル画像処理)

目的

  1. matlab のビジュアル インターフェイス設計 GUI をマスターする
  2. 画像のコレクション変換をマスターする

実験内容

  1. グレースケール画像のグレースケール線形マッピング。高度なパラメータの調整 (パラメータはテキスト ボックスに入力) により、画質調整が実現されます。 g(x, y)=a*f(x, y) +b

デザインのアイデア

1. グレースケール画像をロードします。まず、処理するグレースケール画像をプログラムにロードする必要があります。

2. グレースケール変換: 後続のグレースケール マッピング処理のために、カラー イメージをグレースケール イメージに変換します。

3. グレースケール線形マッピング: 式 g(x,y)=a*f(x,y)+b に従って、グレースケール画像に対してグレースケール線形マッピングが実行されます。このうち、a と b はテキスト ボックスに入力されたパラメータ、f(x, y) は (x, y) 位置の元のグレースケール画像のピクセル値を表し、g(x, y) は位置 (x, y) の処理されたグレースケール画像を表します。 (x,y) 位置のピクセル値。

4. 処理結果の表示: 処理されたグレースケール画像を表示します。

コードとコメント

   function Pushbutton1_Callback(hObject、eventdata、handles)

% hObject ハンドルを開く (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ファイルを開いて読み込みます

[ファイル名,パス名]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'画像を選択','F:\test'); %画像アドレスを取得

str=[パス名 ファイル名]; % ファイルアドレスを格納

if isequal(filename,0)||isequal(pathname,0) % 一部はプロンプトです

    warndlg('最初に画像を選択してください!','警告');

    戻る;

それ以外

    Handles.OriginalPic= imread(str); % 元の画像を読み取ります

    axes(handles.axes1); % が axes1 に表示されます

    imshow(handles.OriginalPic);

終わり;

guidata(hObject,handles);

関数pushbutton2_Callback(hObject、eventdata、ハンドル)

% GUI インターフェースの対応する編集コントロールの値を取得します。

% axes1 の画像を取得します

img=handles.OriginalPic

a = str2double(get(handles.edit2, 'String'));

b = str2double(get(handles.edit3, 'String'));

出力Img = a * double(img) + b;

軸(ハンドル.axes2);

imshow(uint8(outputImg));

% hObject ハンドルを押しボタン 2 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

 

結果分析

画質調整では、傾きや切片を調整することで画像の明るさ、コントラスト、明るさを変えることができます。たとえば、画像の明るさを上げたい場合は、切片を減らしながら傾きを適切に増やす必要があります。画像のコントラストを上げたい場合は、傾きを増やす必要がありますが、傾きを変更する必要はありません。インターセプト。

  1. 画像のヒストグラム表示、ヒストグラム均等化を実現(ボタン)

デザインのアイデア

1. 画像の読み込み: imread 関数またはその他の関連関数を使用して、ファイルから画像を読み込みます。

2. 元の画像を表示する: imshow 関数を使用して、読み取った画像を GUI インターフェイス上に表示し、ユーザーが操作できるようにします。

3. ヒストグラムの表示: 画像のグレースケール ヒストグラムを計算し、ヒストグラム機能を使用して描画します。ヒストグラム機能は、画像のヒストグラムを自動的に計算し、ヒストグラムの形式で GUI インターフェイスに表示できます。

4. ヒストグラム均等化の実現: ユーザーの操作に従って、ボタンクリックイベントで histeq 関数を呼び出してヒストグラム均等化を実現し、GUI インターフェイスの画像とヒストグラム表示を更新します。

5. ボタンの追加: GUI インターフェイスにボタンを追加し、イベント応答関数をバインドして、ユーザー インタラクションを実現します。

コードとコメント

function Pushbutton3_Callback(hObject、eventdata、handles)

img=ハンドル.オリジナル写真;

[カウント、ビン] = imhist(rgb2gray(img));

% axes4 にヒストグラムを描画します

プロット(ハンドル.axes3、ビン、カウント);

% hObject ハンドルを押しボタン 3 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton4 のボタン押下で実行します。

関数pushbutton4_Callback(hObject、eventdata、ハンドル)

img=ハンドル.オリジナル写真;

% 画像に対してヒストグラム等化を実行します。

img_eq = histeq(rgb2gray(img));

% イコライズされた画像をaxes3に表示します

imshow(img_eq, '親', handles.axes3);

% イコライズされた画像のヒストグラムを計算します。

[counts_eq, bins_eq] = imhist(img_eq);

% 均等化されたヒストグラムをaxes4に描画します

プロット(ハンドル.axes4, bins_eq, counts_eq);

  

結果分析

1. ヒストグラム表示: ヒストグラム機能によってグレースケール画像のヒストグラムが生成され、異なるグレースケール レベルの発生頻度が明確にわかります。画像の明るさ、コントラスト、色の分布はヒストグラムの形状によって判断でき、後続の処理のための基本情報が得られます。

2. ヒストグラム等化: histeq 関数を呼び出してヒストグラム等化を実現することで、画像の視覚効果を高めることができます。ヒストグラム等化により、画像のダイナミック レンジが拡張され、グレー値の低いピクセルの明るさが増加し、グレー値の高いピクセルの明るさが減少するため、画像全体が明るくなり、視覚効果が向上します。

3. 2 つの画像を読み取り、基本的な代数演算を実現します

デザインのアイデア

1. GUI に 2 つの軸を追加して、処理された画像結果を表示します。

2. 加算および減算演算をトリガーするボタンまたはその他のオブジェクトを作成します。

3. 画像の加算と減算を実現する Matlab コードを記述します。イメージの読み取りには関数 imread を使用し、加算には関数 imadd を、減算には関数 imsubtract を使用できます。

4. 処理された結果を軸に表示します。関数 imshow を使用して、イメージを軸に表示できます。

コードとコメント

関数pushbutton7_Callback(hObject、eventdata、ハンドル)

res=imadd(ハンドル.ピクチャ1,ハンドル.ピクチャ2)

imshow(res, '親', handles.axes10)

% hObject ハンドルを押しボタン 7 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton8 のボタン押下で実行します。

関数pushbutton8_Callback(hObject、eventdata、ハンドル)

res=imsubtract(ハンドル.ピクチャ1,ハンドル.ピクチャ2)

imshow(res, '親', handles.axes11)

% hObject ハンドルを押しボタン 8 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

結果分析

2枚の画像を読み込んで足し算・引き算を行う操作をMatlab上で実現します。

4. 平均値フィルタリングと中央値フィルタリングを実現します(テンプレート サイズパラメータはテキスト ボックスに入力されます)

デザインのアイデア

平均値フィルタリングの考え方は次のとおりです。

  1. 処理する画像のサイズとフィルター テンプレートを取得します。
  2. 処理対象の画像を横断して、ピクセルごとにフィルター テンプレート領域内のすべてのピクセルの平均値を取得し、その平均値を現在のピクセルに割り当てます。
  3. 画像全体を走査するまでステップ 2 を繰り返します。

メディアンフィルターの実装アイデアは次のとおりです。

  1. 処理する画像のサイズとフィルター テンプレートを取得します。
  2. 処理対象の画像を横断して、ピクセルごとに、フィルター テンプレート領域内のすべてのピクセルのグレー値を取得し、並べ替え後の中間値を取得し、その中間値を現在のピクセルに割り当てます。
  3. 画像全体を走査するまでステップ 2 を繰り返します。

コードとコメント

   function Pushbutton5_Callback(hObject、eventdata、handles)

オリジナル画像 =handles.OriginalPic;

オリジナルイメージ=rgb2gray(オリジナルイメージ);

filterSize = str2double(get(handles.edit4, 'String'));

% 平均フィルタリングを適用します

meansFiltered = imfilter(originalImage, fspecial('average', [filterSize filterSize]));

% フィルタリングされた画像をaxes3とaxes4に表示します

軸(ハンドル.axes5);

imshow(meanFiltered);

% hObject ハンドルを押しボタン 5 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton6 のボタン押下で実行します。

function Pushbutton6_Callback(hObject、eventdata、handles)

オリジナル画像 =handles.OriginalPic;

オリジナルイメージ=rgb2gray(オリジナルイメージ);

% 編集ボックスからフィルター サイズを取得します

filterSize = str2double(get(handles.edit4, 'String'));

% メディアン フィルターを適用します

medianFiltered = medfilt2(originalImage, [filterSize フィルターサイズ]);

軸(ハンドル.axes6);

imshow(medianFiltered);

% hObject ハンドルを押しボタン 6 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

結果分析

1. 平均値フィルタリング結果の分析: 平均値フィルタリングは画像を効果的に平滑化できますが、画像の細部がぼやけてしまいます。フィルター テンプレートのサイズが大きくなると、画像の滑らかさが向上しますが、画像がよりぼやけます。したがって、フィルター テンプレートのサイズを選択するときは、特定の状況に応じて調整する必要があります。

2. メディアン フィルタリング結果の分析: メディアン フィルタリングは、画像のエッジ情報を保持しながら、ガウス ノイズ以外のゴマ塩ノイズなどのノイズを効果的に除去できます。同様に、フィルター テンプレートのサイズが大きくなると、ノイズをより効果的に除去できますが、画像の細部も歪んでしまいます。したがって、フィルターテンプレートのサイズを選択する際にも適切な調整が必要です。

問題と解決策

  1. グレースケール画像のグレースケール線形マッピング。高度なパラメータの調整 (パラメータはテキスト ボックスに入力) により、画質調整が実現されます。 g(x, y)=a*f(x, y) +b

発生する可能性のある問題:

  • 入力パラメータの形式が正しくないか、妥当な範囲を超えているため、コード エラーが発生します。
  • 表示される結果は期待どおりではなく、コードの実装に論理エラーがある可能性があります。

解決:

  • コード開発の過程では、入力パラメータの形式や値の範囲を厳密に管理およびチェックする必要がありますが、これは Matlab に付属する入力検証機能を使用することで実現できます。
  • コードをデバッグするときに、中間結果を段階的に印刷および検査して、コード内のエラーを見つけることができます。
  1. 画像のヒストグラム表示、ヒストグラム均等化を実現(ボタン)

発生する可能性のある問題:

  • 画像の読み取りに失敗したか、読み取り画像形式がヒストグラム操作をサポートしていません。
  • ヒストグラムが正しく計算されていないか、ヒストグラム等化アルゴリズムの効果が期待どおりではありません。

解決:

  • コード開発プロセス中に、読み取った画像形式が正しく、ヒストグラム操作をサポートしていることを確認してください。
  • コードをデバッグするときは、中間結果を段階的に印刷して確認してコード内のエラーを見つけることができますが、同時に、出力結果がユーザーの期待を満たしていることを確認するために、アルゴリズムの効果を慎重に設計およびテストする必要もあります。
  1. 2 つの画像を読み取り、基本的な代数演算を実装し、平均フィルタリングと中央値フィルタリングを実装します (テンプレート サイズ パラメータはテキスト ボックスに入力されます)。

発生する可能性のある問題:

  • 入力パラメータの形式が正しくないか、妥当な範囲を超えているため、コード エラーが発生します。
  • 画像の読み取りに失敗したか、読み取った画像形式が必要な操作をサポートしていません。
  • アルゴリズムの実装に論理エラーがあり、予期しない出力結果が発生します。

解決:

  • コード開発の過程では、入力パラメータの形式や値の範囲を厳密に管理およびチェックする必要がありますが、これは Matlab に付属する入力検証機能を使用することで実現できます。
  • コードをデバッグするときは、中間結果を段階的に印刷して確認してコード内のエラーを見つけることができますが、同時に、出力結果がユーザーの要求を満たすようにアルゴリズムの効果を慎重に設計およびテストする必要もあります。期待。

まとめと体験談

グレー スケール線形マッピングは、実際のアプリケーションでよく使用される、シンプルで効果的な画像強調方法です。コードを実装する際には、予期せぬエラーを避けるために入力パラメータを厳密にチェックして制御する必要があると同時に、出力結果がユーザーの要求を満たすようにアルゴリズムの効果を慎重に設計およびテストする必要もあります。期待。ヒストグラムは一般的に使用される画像統計ツールであり、画像の分布を効果的に説明できます。ヒストグラム等化アルゴリズムは、画像のコントラストを強化し、画像の視覚効果をより豊かにすることができます。実際のアプリケーションでは、さまざまなシナリオや要件に応じて適切なアルゴリズムを選択し、アルゴリズムの実装を完全にテストおよびデバッグする必要があります。基本的な代数演算、平均値フィルタリング、メディアン フィルタリングは画像処理で一般的に使用される演算であり、実際のアプリケーションで非常に役立ちます。コードを実装する際には、予期せぬエラーを避けるために入力パラメータを厳密にチェックして制御する必要があると同時に、出力結果がユーザーの要求を満たすようにアルゴリズムの効果を慎重に設計およびテストする必要もあります。期待。平均値フィルタリングと中央値フィルタリングの実現はデジタル画像処理の基本操作であり、これら 2 つのフィルタリング アルゴリズムを習得することで、画像のノイズを効果的に除去し、画像を滑らかにすることができます。実装プロセスでは、例外処理と境界の問題に注意を払い、最良の結果を得るために画像の特性に応じて適切なテンプレート サイズを選択する必要があります。

付録

関数 varargout = text1(varargin)

% TEXT1 text1.fig の MATLAB コード

% TEXT1 は、単独で新しい TEXT1 を作成するか、既存の TEXT1 を生成します。

% シングルトン*。

%

% H = TEXT1 は、新しい TEXT1 へのハンドル、または TEXT1 へのハンドルを返します。

% 既存のシングルトン*。

%

% TEXT1('CALLBACK',hObject,eventData,handles,...) はローカル関数を呼び出します。

% 指定された入力引数を持つ TEXT1.M 内の CALLBACK という名前の関数。

%

% TEXT1('Property','Value',...) は、新しい TEXT1 を作成するか、

% 既存のシングルトン*。左から順に、プロパティ値のペアは次のとおりです。

% text1_OpeningFcn が呼び出される前に GUI に適用されます。アン

% 認識できないプロパティ名または無効な値によりプロパティが適用されます

% ストップ。すべての入力は、varargin を介して text1_OpenFcn に渡されます。

%

% *GUIDE の [ツール] メニューの GUI オプションを参照してください。「GUI で許可されるのは 1 つだけです」を選択します

% 実行するインスタンス (シングルトン)」。

%

% 参照: GUIDE、GUIDATA、GUIHANDLES

% 上記のテキストを編集して、ヘルプ テキスト 1 への応答を変更します。

% 最終更新者: GUIDE v2.5 27-May-2023 14:40:51

% 初期化コードの開始 - 編集しないでください

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

                   'gui_Singleton'、gui_Singleton、...

                   'gui_openingfcn'、@text1_openingfcn、...

                   'gui_OutputFcn'、@text1_OutputFcn、...

                   'gui_LayoutFcn'、[] 、...

                   'gui_Callback', []);

if 値 && ischar(value{1})

    gui_State.gui_Callback = str2func(varargin{1});

終わり

ナルグアウトの場合

    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

それ以外

    gui_mainfcn(gui_State, varargin{:});

終わり

% 初期化コードの終了 - 編集しないでください

% --- text1 が表示される直前に実行されます。

関数 text1_openingFcn(hObject、eventdata、ハンドル、varargin)

% この関数には出力引数がありません。OutputFcn を参照してください。

% hFigure へのオブジェクト ハンドル

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% varargin text1 へのコマンド ライン引数 (VARARGIN を参照)

% text1 のデフォルトのコマンドライン出力を選択します

ハンドル.出力 = hObject;

% ハンドル構造を更新します

guidata(hObject, ハンドル);

% UIWAIT は text1 をユーザーの応答を待機させます (UIRESUME を参照)

% uiwait(handles.figure1);

% --- この関数からの出力はコマンド ラインに返されます。

function varargout = text1_OutputFcn(hObject、eventdata、ハンドル)

% varargout 出力引数を返すセル配列 (VARARGOUT を参照);

% hFigure へのオブジェクト ハンドル

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ハンドル構造体からデフォルトのコマンドライン出力を取得します。

varargout{1} = ハンドル.出力;

関数 edit2_Callback(hObject、イベントデータ、ハンドル)

% edit2 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ヒント: get(hObject,'String') は edit2 の内容をテキストとして返します

% str2double(get(hObject,'String')) は edit2 の内容を double として返します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 edit2_CreateFcn(hObject、イベントデータ、ハンドル)

% edit2 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: Windows では通常、編集コントロールの背景は白です。

% ISPC および COMPUTER を参照。

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

終わり

関数 edit3_Callback(hObject、イベントデータ、ハンドル)

% edit3 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ヒント: get(hObject,'String') は edit3 の内容をテキストとして返します

% str2double(get(hObject,'String')) は edit3 の内容を double として返します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 edit3_CreateFcn(hObject、イベントデータ、ハンドル)

% edit3 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: Windows では通常、編集コントロールの背景は白です。

% ISPC および COMPUTER を参照。

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

終わり

% --- Pushbutton1 のボタン押下で実行します。

function Pushbutton1_Callback(hObject、eventdata、handles)

% hObject ハンドルを開く (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ファイルを開いて読み込みます

[ファイル名,パス名]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'画像を選択','F:\test'); %画像アドレスを取得

str=[パス名 ファイル名]; % ファイルアドレスを格納

if isequal(filename,0)||isequal(pathname,0) % 一部はプロンプトです

    warndlg('最初に画像を選択してください!','警告');

    戻る;

それ以外

    Handles.OriginalPic= imread(str); % 元の画像を読み取ります

    axes(handles.axes1); % が axes1 に表示されます

    imshow(handles.OriginalPic);

終わり;

guidata(hObject,handles);

% hObject ハンドルを押しボタン 1 (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- スライダーの移動時に実行します。

関数 slider1_Callback(hObject、eventdata、ハンドル)

% slider1 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ヒント: get(hObject,'Value') はスライダーの位置を返します

% get(hObject,'Min') と get(hObject,'Max') でスライダーの範囲を決定します

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 slider1_CreateFcn(hObject, イベントデータ, ハンドル)

% slider1 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: 通常、スライダー コントロールの背景は明るい灰色です。

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor',[.9 .9 .9]);

終わり

% --- スライダーの移動時に実行します。

関数 slider2_Callback(hObject、eventdata、ハンドル)

% slider2 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ヒント: get(hObject,'Value') はスライダーの位置を返します

% get(hObject,'Min') と get(hObject,'Max') でスライダーの範囲を決定します

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 slider2_CreateFcn(hObject、イベントデータ、ハンドル)

% slider2 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: 通常、スライダー コントロールの背景は明るい灰色です。

if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor',[.9 .9 .9]);

終わり

% --- Pushbutton2 のボタン押下で実行します。

関数pushbutton2_Callback(hObject、eventdata、ハンドル)

% GUI インターフェースの対応する編集コントロールの値を取得します。

% axes1 の画像を取得します

img=handles.OriginalPic

a = str2double(get(handles.edit2, 'String'));

b = str2double(get(handles.edit3, 'String'));

出力Img = a * double(img) + b;

軸(ハンドル.axes2);

imshow(uint8(outputImg));

% hObject ハンドルを押しボタン 2 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton3 のボタン押下で実行します。

function Pushbutton3_Callback(hObject、eventdata、handles)

img=ハンドル.オリジナル写真;

[カウント、ビン] = imhist(rgb2gray(img));

% axes4 にヒストグラムを描画します

プロット(ハンドル.axes3、ビン、カウント);

% hObject ハンドルを押しボタン 3 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton4 のボタン押下で実行します。

関数pushbutton4_Callback(hObject、eventdata、ハンドル)

img=ハンドル.オリジナル写真;

% 画像に対してヒストグラム等化を実行します。

img_eq = histeq(rgb2gray(img));

% イコライズされた画像をaxes3に表示します

imshow(img_eq, '親', handles.axes3);

% イコライズされた画像のヒストグラムを計算します。

[counts_eq, bins_eq] = imhist(img_eq);

% 均等化されたヒストグラムをaxes4に描画します

プロット(ハンドル.axes4, bins_eq, counts_eq);

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes1_CreateFcn(hObject、イベントデータ、ハンドル)

% axes1 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

% ヒント: Axes1 を設定するには、OpenFcn にコードを配置します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes2_CreateFcn(hObject、イベントデータ、ハンドル)

% axes2 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

% ヒント: Axes2 を設定するには、OpenFcn にコードを配置します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes3_CreateFcn(hObject、イベントデータ、ハンドル)

% axes3 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

% ヒント: Axes3 を設定するには、OpenFcn にコードを配置します。

% --- Pushbutton5 のボタン押下で実行します。

function Pushbutton5_Callback(hObject、eventdata、handles)

オリジナル画像 =handles.OriginalPic;

オリジナルイメージ=rgb2gray(オリジナルイメージ);

filterSize = str2double(get(handles.edit4, 'String'));

% 平均フィルタリングを適用します

meansFiltered = imfilter(originalImage, fspecial('average', [filterSize filterSize]));

% フィルタリングされた画像をaxes3とaxes4に表示します

軸(ハンドル.axes5);

imshow(meanFiltered);

% hObject ハンドルを押しボタン 5 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton6 のボタン押下で実行します。

function Pushbutton6_Callback(hObject、eventdata、handles)

オリジナル画像 =handles.OriginalPic;

オリジナルイメージ=rgb2gray(オリジナルイメージ);

% 編集ボックスからフィルター サイズを取得します

filterSize = str2double(get(handles.edit4, 'String'));

% メディアン フィルターを適用します

medianFiltered = medfilt2(originalImage, [filterSize フィルターサイズ]);

軸(ハンドル.axes6);

imshow(medianFiltered);

% hObject ハンドルを押しボタン 6 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

関数 edit4_Callback(hObject、eventdata、ハンドル)

% edit4 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% ヒント: get(hObject,'String') は edit4 の内容をテキストとして返します

% str2double(get(hObject,'String')) は edit4 の内容を double として返します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 edit4_CreateFcn(hObject、イベントデータ、ハンドル)

% edit4 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: Windows では通常、編集コントロールの背景は白です。

% ISPC および COMPUTER を参照。

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))

    set(hObject,'BackgroundColor','white');

終わり

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes6_CreateFcn(hObject、イベントデータ、ハンドル)

% axes6 への hObject ハンドル (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

% ヒント: Axes6 を設定するには、OpenFcn にコードを配置します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes5_CreateFcn(hObject、イベントデータ、ハンドル)

% axes5 への hObject ハンドル (GCBO を参照)

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: Axes5 を設定するには、OpenFcn にコードを配置します。

% --- オブジェクトの作成中に、すべてのプロパティを設定した後に実行します。

関数 axes4_CreateFcn(hObject、イベントデータ、ハンドル)

% axes4 への hObject ハンドル (GCBO を参照)

set( gca, 'xtick', [] ); % X 軸のスケールを削除します

set( gca, 'ytick', [] ); % y 軸のスケールを削除します

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルが空です - すべての CreateFcns が呼び出されるまでハンドルは作成されません

% ヒント: Axes4 を設定するには、OpenFcn にコードを配置します。

% --- Pushbutton7 のボタン押下で実行します。

関数pushbutton7_Callback(hObject、eventdata、ハンドル)

res=imadd(ハンドル.ピクチャ1,ハンドル.ピクチャ2)

imshow(res, '親', handles.axes10)

% hObject ハンドルを押しボタン 7 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton8 のボタン押下で実行します。

関数pushbutton8_Callback(hObject、eventdata、ハンドル)

res=imsubtract(ハンドル.ピクチャ1,ハンドル.ピクチャ2)

imshow(res, '親', handles.axes11)

% hObject ハンドルを押しボタン 8 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton9 のボタン押下で実行します。

関数pushbutton9_Callback(hObject、eventdata、ハンドル)

[ファイル名,パス名]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'画像を選択','F:\test'); %画像アドレスを取得

str=[パス名 ファイル名]; % ファイルアドレスを格納

if isequal(filename,0)||isequal(pathname,0) % 一部はプロンプトです

    warndlg('最初に画像を選択してください!','警告');

    戻る;

それ以外

    Handles.picture1= imread(str); % 元の画像を読み取ります

    axes(handles.axes8); % が axes1 に表示されます

    imshow(handles.picture1);

終わり;

guidata(hObject,handles);

% hObject ハンドルを押しボタン 9 に渡します (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

% --- Pushbutton10 のボタン押下で実行します。

function Pushbutton10_Callback(hObject、eventdata、handles)

[ファイル名,パス名]=uigetfile({'*.bmp;*.jpg;*.png;*.jpeg;*.tif'},'画像を選択','F:\test'); %画像アドレスを取得

str=[パス名 ファイル名]; % ファイルアドレスを格納

if isequal(filename,0)||isequal(pathname,0) % 一部はプロンプトです

    warndlg('最初に画像を選択してください!','警告');

    戻る;

それ以外

    Handles.picture2= imread(str); % 元の画像を読み取ります

    axes(handles.axes9); % が axes1 に表示されます

    imshow(handles.picture2);

終わり;

guidata(hObject,handles);

% hObject ハンドルから Pushbutton10 (GCBO を参照)

%eventdata 予約済み - MATLAB の将来のバージョンで定義される予定

% ハンドルとユーザー データを含む構造体をハンドルします (GUIDATA を参照)

おすすめ

転載: blog.csdn.net/m0_63975371/article/details/131419326