MATLAB Answers

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

1 view (last 30 days)
virgo kk
virgo kk on 7 Feb 2020
Commented: virgo kk on 10 Feb 2020
元々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)

Accepted Answer

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

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!