フォルダ内のmri画像に値してアンシャープマスキングを行って,三次元配列に格納したい
조회 수: 3 (최근 30일)
이전 댓글 표시
元々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)
댓글 수: 0
채택된 답변
Akira Agata
2020년 2월 7일
편집: Akira Agata
2020년 2월 7일
forループのなかのimsharpen関数への入力引数が、char型になっているように見えます。
たとえばforループ内の2行を以下のように変更すると、いかがでしょうか?
I = imread(imFiles(k).name); % 格納
sharpscale(:,:,k) = imsharpen(I);
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!