• 締切済み

MATLABでのエッジ強度画像の出力と保存

MATLABで画像処理を行ない,対象とする画像(添付のcell.jpg)の勾配強度画像を得たいと思っております.ただし,その保存がうまくいきません. プログラムは,下記のコードを利用しました. im = imread('C:/work/cell.jpg'); im = rgb2gray(im); %メディアンフィルタで平滑化 J = medfilt2(im); figure(1) imshow(J) %勾配強度画像を求める hy = fspecial('sobel'); hx = hy'; Iy = imfilter(double(J), hy, 'replicate'); Ix = imfilter(double(J), hx, 'replicate'); gradmag = sqrt(Ix.^2 + Iy.^2); %figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)') imshow(gradmag,[]) 上記のプログラムで正しくエッジ強度画像は出力されるのですが,問題はそれを保存するときです. 「imwrite(gradmag, 'C:/work/cell_grad.jpg','jpg')」 のように保存すると,添付ファイルのようになってしまいます. どのようにしたら解決できますでしょうか. どなたかお分かりになる方がいらっしゃいましたら,ご教示お願い致します.

みんなの回答

  • m0r1_2006
  • ベストアンサー率36% (169/464)
回答No.1

matlab のグレースケール画像は, 0 から 1 の間の実数値なので, 正規化してから保存 min_gradmag = min(min(gradmag)); max_gradmag = max(max(gradmag));; gradmag1 = (gradmag - min_gradmag) / (max_gradmag - min_gradmag); imwrite(gradmag1,'test.jpg','jpg'); とか

関連するQ&A

  • 「imagejpeg」(GD)で作成した画像を保存できない

    <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> http://www.php.net/manual/ja/function.imagejpeg.php を参照して(そのまま利用して)、画像を作成して表示させてみました。 すると、これはその通り、うまく画像が表示されました。 しかし、 <?php // 空の画像を作成し、テキストを追加します $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // 【追加分】: 画像を保存する imagejpeg($im, 'new.jpg'); // content type ヘッダを、ここでは image/jpeg と設定します header('Content-type: image/jpeg'); // 画像を出力します imagejpeg($im); // メモリを開放します imagedestroy($im); ?> のように imagejpeg($im, 'new.jpg'); を挿入して、その画像を保存しようとしているのですが、うまくいきません。(何も起こりません。) ちなみに、保存するためのディレクトリのパーミッションはその親ディレクトリを含め、(7,7,7)です。 「new.jpg(相対パス)」を「/www/.../new.jpg」のように絶対パスを使ってやっても結果は同じでうまくいきませんでした。 どのようにすれば、新しく作成した画像を保存できるのでしょうか? ちなみに、OSはLinux(Fedora10)です。もちろん、GDは先のテストで証明される通り、動作していると思います。 よろしくお願い致します。

    • 締切済み
    • PHP
  • jpgで保存するとたまに画像が開けない

    インターネット上での画像(jpg)を右クリックで保存した時、たまになのですが、語尾に『.jpg』とつけないでそのまま保存すると、あとで開こうとした時に、 「このファイルをどのアプリケーションから開きますか」 (うろ覚えですが;)という窓が出てきてしまいます。 毎回『.jpg』を付けないとなる、というわけではなくて、 たまになのですが。 因みに、gifやpng他ではなりません。jpgだけでした。 photoshopなどで作成した画像を保存する時は、 『.jpg』を付けなくても、ちゃんと保存できます。 win98・IE6SP1・photoshopはAdobe photoshop 5.0Jです。宜しくお願いします。

  • openCVの画像処理について

    画像の中にある粒子の位置を検出し、座標の値の取得をどうしてもOpenCVをつかって、出したいと考えております。 プログラミングが実行したら、すべて0と表示されたり、エラーが出たりします。 現在、画像を読み込み、2値化し、2値化した画像の画素数を列ごとに足して、垂直方向の画素数の最大値の検出、2値化した画像の画素数を行ごとに足して、水平方向の画素数の最大値の検出を行っています。 使用した画像を添付させていただきますので、もしアドバイスなどいただけたらよろしくお願い致します。 #include <stdio.h> #include <math.h> #include <cv.h> #include <cxcore.h> #include <highgui.h> #define X 640 #define Y 480 IplImage *grayImage; //グレースケール画像用IplImage IplImage *binaryImage; //2値画像用IplImage char windowNameBinarization[] = "Binarization";//2値化した画像を表示するウィンドウの名前 int levels = 115; //トラックバーの値(2値化の際の閾値) static int h[X][Y]; int main( /*int argc, char **argv*/ ){ // 画像を読み込む IplImage *sourceImage = cvLoadImage( "C:/Documents and Settings/Owner/My Documents/My Pictures/Logicool Webcam/Picture 10.jpg",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR); if ( sourceImage == NULL ) { // 画像が見つからなかった場合 printf( "画像が見つかりません\n" ); return -1; } // 画像を生成する IplImage *grayImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 );//グレースケール画像用IplImage IplImage *binaryImage = cvCreateImage( cvGetSize(sourceImage), IPL_DEPTH_8U, 1 ); //2値画像用IplImage // BGRからグレースケールに変換する cvCvtColor( sourceImage, grayImage, CV_BGR2GRAY ); // グレースケールから2値に変換する cvThreshold( grayImage, binaryImage, levels, 255, CV_THRESH_BINARY ); /*グラフ値の取得*/ IplImage *img; img = cvCloneImage (binaryImage); //画像をコピー int bytes_per_pixel = ((img->depth & 255) / 8) * img->nChannels; // (1)画素値を順次取得 int i,j,k,t; int Hy[Y],Hx[X]; //宣言 //垂直方向の画素値 for(k = 0; k <Y /*img->height*/; k++) { Hy[k] = 0;//初期化 } if((unsigned char)img->imageData>levels){ for(j = 0;j < Y/*img->height*/; j++) { for(i = 0; i < X; i++) {Hy[j] += *(img->imageData + (img->widthStep*j) + (i*bytes_per_pixel)); } }} //水平方向の画素値 for(t = 0; t < X/*img->width*/; t++) { Hx[t]=0; //初期化 } if((unsigned char)img->imageData>levels){ for(i = 0;i < X/*img->width*/; i++) { for(j = 0;j < Y; j++) { Hx[i] = Hx[i]+h[i][j]; } }} //Hy[j]の最大値の座標を調べる int MY = Hy[0]; int my = 0; for(int j=0; j< Y-1; j++){ if(Hy[j]<Hy[j+1]){ MY = Hy[j+1]; my = j+1; } } //Hx[i]の最大値の座標を調べる int MX = Hx[0]; int mx = 0; for(int i=0; i< X-1; i++){ if(Hx[i]<Hx[i+1]){ MX = Hx[i+1]; mx = i+1; } } printf("垂直方向の最大値 %d , 垂直方向の最大値になるときのy軸の値 %d \n", MY,my); printf("水平方向の最大値 %d , 水平方向の最大値になるときのx軸の値 %d \n", MX,mx); int cvWaitKey(int delay=10); //どこでとめるかをあらわす cvReleaseImage( &sourceImage ); cvReleaseImage( &grayImage ); cvReleaseImage( &binaryImage ); cvDestroyWindow( windowNameBinarization); return 0 ; }

  • USB保存の画像が開かない

    USBメモリーに保存してあった画像が開かなくなりました。 画像を開くためにダブルクリックすると画像ソフトが立ち上がって開こうとしますが、タイムアウトエラーが出て、開きません。かなり多くのフォルダとその中に多くの画像(jpg)が保存されていますが、全て開かなくなりました。 USBメモリー自体が壊れたしまったのか?ファイルが壊れてしまったのか分かりません。 ウイルスに感染したのかと思って、ウイルスバスタでスキャンしようとしましたが、それもタイムアウトになりスキャン自体ができない状態です。 復旧して画像を開く方法がありますか? 教えてください。

  • wwwに画像を貼り付けましたが「PHSに保存」できません

    自分のサイトに自分の書いた絵(jpg)を貼り付けました。 phs(j3003s)に待ち受けようにと画像をダウンロードしようと思うのですが「保存できない画像添付」に指定されているようでダウンできません。 htmlでは、わざわざそのような記述はしていないのです。 記述していない状態(デフォルト)では、むやみに画像ダウンできないしくみなのでしょうか? ダウンしていいという記述はどうすればいいのでしょうか?

    • ベストアンサー
    • HTML
  • 緊急です!!Eメールの画像が保存できない!

    こんにちは♪ 同じような質問があったのですが、 どの回答を見ても、解決しませんでした。 実は、オークション用に、 携帯で写真を撮りました。 それをメールで、パソコンに送ったのですが、 添付された画面のクリップマークを、クリックすると、 『TS310043.JPG』とありますが、 白くなってて、保存ができません。 画像の上で、右クリックして、 「名前を付けて保存」にして、マイピクチャーへ保存したところ、 アイコンはウインドウズのマークになってて、 ダブルクリックでは、開きません。 しかし、画像は左下に表示されているんです。 この画像を、どうしたら普通のように、 保存できるのでしょうか。 本当にそういう事に関しては、無知なもので、 なにもわかりません。 早くオークションに出さなければいけないため、 緊急で、みなさまにご回答をおねがいします。 よろしくおねがいいたします!!

  • 「名前を付けて保存」ついて教えてください

    会社では「Windows2000 プロフェッショナル」を使用しています。 Windows2000でホームページの画像を「名前を付けて保存」を選ぶと、ファイルの種類に「JPG」が選べるようになっておりJPG形式として保存できます。 自宅用に初めてPCを購入したのですがOSは「WindowsXP HE」です。 WindowsXP HE の場合ですが、同じホームページの画像でもファイルの種類に「JPG」が表示されません。 でてくるのは、「BMP」「GIF」です。 1.「JPG」で保存することはできないのでしょうか?   できるのでしたらその方法を教えてください。 2.「GIF」で保存した画像ですが、エクスプローラーの   「表示」-「縮小版」でみると画像が表示されません。   また、その画像をダブルクリックするとタイトルが   「Windows 画像とFAX ビューア」の画面が表示されますが   「プレビューを利用できません」と表示されます。   これは何故でしょうか?その対処方法を教えてください。

  • 携帯から送信された画像データを保存したい

    携帯電話よりメールに添付されたデータをサーバより取出して○○○.jpgとして 保存したいです。(今現在サーバ接続し、画像データらしきものを切り分けするとこまで出来てるのですが、現状のデータのまま保存してもうまく画像として開けません) なにか変換して保存が必要なのでしょうか? ↓現在切り分けした画像データの最初の部分 --XA33MOXv Content-Type: image/jpeg; name="F1011588.jpg" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="F1011588.jpg" /9j/4QO8RXhpZgAATU0AKgAAAAgADAEOAAIAAAANAAAAngEPAAIAAAAHAAAArAEQAAIAAAAFAAAA tAESAAMAAAABAAEAAAEaAAUAAAABAAAAugEbAAUAAAABAAAAwgEoAAMAAAABAAIAAAExAAIAAAAN

    • ベストアンサー
    • PHP
  • スキャナーで取り込んだjpg画像を綺麗に保存するには

    使用環境:Win2000サービスパック2      スキャナーエプソンGT7000 使用ソフト:Paint Shop Pro バージョン4.20J      :PhotoImpact    バージョン6.0 紙に印刷されている写真画像や絵を上記の環境でスキャナーで取込み、解像度100でスキャンした後その画像をjpg形式で保存すると、次に開いた時絵や文字の周りに細かい点々がついてしまって、ボヤけ汚くなってしまいます。このような画像を綺麗にするにはどうしたら良いでしょうか。 画像を綺麗に取込み保存する方法を教えて下さい。よろしくおねがいいたします。      

  • jpeg画像でアニメーションを作る

    jpeg画像10枚くらいをつかい、アニメーションを作りたく以下のようなプログラム(全部載せられませんでした)を組んでみました。しかし、画像読み込みにすごく時間がかかり、アニメーションという感じがしないほど、さっと画像が表示されて終わってしまいます。もっと、一枚一枚をゆっくり表示させたく画像読み込みの時間も短縮したいのですが、何か良い方法はありますでしょうか(ちなみに画像のキャンバスサイズは512×384です) import java.applet.*; import java.awt.*; import java.net.*; public class im2a extends Applet implements Runnable{ Image im[] = new Image[10]; URL url; String fn[]={"anime10.jpg","anime11.jpg","anime4.jpg","anime5.jpg",  "anime1.jpg","anime2.jpg","anime1.jpg","anime2.jpg",  "anime8.jpg","anime7.jpg"}; Thread th; MediaTracker mt = new MediaTracker(this); String ms =""; String s =""; int i=0; int j=0; int dt=100; int phase=2 ; boolean ok=false;   public void start(){ th =new Thread(this); th.start(); }    public void readImage(){ ms ="画像入力準備中"; repaint(); for(i=0;i<9;++i){ im[i]=getImage(getDocumentBase(),fn[i]); mt.addImage(im[i],i); ok=false; while(!ok){ try{ Thread.sleep(2000); } catch(InterruptedException ee) { } ok=mt.checkID(i,true); } ms="画像"+i+"読み込み終了"; repaint(); } }

専門家に質問してみよう