フォルダ内のmri画​像に値してアンシャー​プマスキングを行って​,三次元配列に格納し​たい

조회 수: 3 (최근 30일)
virgo kk
virgo kk 2020년 2월 7일
댓글: virgo kk 2020년 2월 10일
元々mriの画像を三次元に拡張してボリュームデータから等値面を表示させるプログラムを作成していたのですが,使う画像にアンシャープマスキングを行って同様の処理を行いたいです.エラーを吐いてしまってどうすればいいかわかりません.ご教授お願いします.
元のプログラム
clear; clc; close all; % 初期化
fileFolder = fullfile(pwd); % 画像の読込み (フォルダ内の数枚の断面画像)
dcmFiles = dir(fullfile(fileFolder,'*.dcm'));
numfiles = length(dcmFiles);
dcm = dicomread(dcmFiles(1).name);
grayscale = zeros(size(dcm,1),size(dcm,2),numfiles);% 三次元配列への拡張
for k = 2:numfiles
grayscale(:,:,k) = dicomread(dcmFiles(k).name); %格納
end
data = cast(grayscale,'uint8');
vol = isosurface(data, 50)%任意の輝度の値で等値面を作成
figure;
patch(vol, 'FaceColor','red', 'EdgeColor','none');
view(-40,24) % 視点の位置
daspect([1 1 0.3]) % X,Y,Z方向のアスペクト比の設定
colormap(gray); box on; camlight; lighting gouraud; % 照明等各種設定 
sec = isocaps(data, 5); % 等値断面(等値面を作ったときの端の切断面)
patch(sec, 'FaceColor','interp', 'EdgeColor','none'); shg; % 等値断面の表示
作成したプログラム
clear; cl
c; close all; % 初期化
fileFolder = fullfile(pwd); % 画像の読込み (フォルダ内の数枚の断面画像)
imFiles = dir(fullfile(fileFolder,'*.bmp'));
numfiles = length(imFiles);
im = imread(imFiles(1).name);
B = imsharpen(im)
figure;
imshow(B)
sharpscale = zeros(size(B,1),size(B,2),numfiles);
for k = 2:numfiles
sharpscale(:,:,k) = imread(imFiles(k).name); %格納
sharpscale(:,:,k) = imsharpen(imFiles(k).name)
end
data = cast(sharpscale,'uint8');
vol = isosurface(data)%任意の輝度の値で等値面を作成
figure;
patch(vol, 'FaceColor','red', 'EdgeColor','none');
view(-40,24) % 視点の位置
daspect([1 1 0.3]) % x,y,z方向アスペクト比の設定
colormap(gray); box on; camlight; lighting gouraud; % 照明等各種設定
sec = isocaps(data, 5); % 等値断面(等値面を作ったときの端の切断面)
patch(sec, 'FaceColor','interp', 'EdgeColor','none'); shg; % 等値断面の表示
エラー表示が出てしまいます.
エラー: imsharpen
1 番目の入力引数 A は次のタイプのいずれかにする必要があります:
uint8, int8, uint16, int16, uint32, int32, single, double
指定されたタイプは char でした。
エラー: imsharpen>parse_inputs (line 209)
validateattributes(A,validImageTypes,{'nonsparse','real'},mfilename,'A',1);
エラー: imsharpen (line 79)
[A, radius, amount, threshold] = parse_inputs(varargin{:});
エラー: sharp (line 14)
sharpscale(:,:,k) = imsharpen(imFiles(k).name)

채택된 답변

Akira Agata
Akira Agata 2020년 2월 7일
편집: Akira Agata 2020년 2월 7일
forループのなかのimsharpen関数への入力引数が、char型になっているように見えます。
たとえばforループ内の2行を以下のように変更すると、いかがでしょうか?
I = imread(imFiles(k).name); % 格納
sharpscale(:,:,k) = imsharpen(I);
  댓글 수: 1
virgo kk
virgo kk 2020년 2월 10일
回答有難うございます。解決しました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!