{ "cells": [ { "cell_type": "code", "execution_count": 2, "id": "initial_id", "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2024-03-18T12:58:36.021344Z", "start_time": "2024-03-18T12:58:35.489144Z" } }, "source": [ "import numpy as np\n", "import cv2\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import cv2 as cv\n", "import os" ], "outputs": [] }, { "cell_type": "code", "execution_count": 4, "source": [ "##合成真彩色图像\n", "#读取raw文件\n", "imagePath ='data/new/yellow/1.raw' \n", "print(type(imagePath))\n", "rawImage = np.fromfile(imagePath,\"uint16\")\n", "print(type(rawImage))\n", "rawShape = rawImage.shape\n", "print(rawShape)\n", "formatImage = np.zeros((87,2048,224))\n", "for row in range(0,87):\n", " for dim in range(0,224):\n", " formatImage[row,:,dim] = rawImage[(dim + row*224) * 2048:(dim + 1 + row*224)* 2048]\n", "print(formatImage.shape)\n", "print(type(formatImage))\n", "print(formatImage)\n", "\n", "#选择通道数为12/46/96的三个通道相当于rgb三通道的图片\n", "# imgR = formatImage[:,:,88]\n", "# imgG = formatImage[:,:,58]\n", "# imgB = formatImage[:,:,31]\n", "# \n", "# rgbImg = cv.merge([imgR,imgG,imgB])\n", "# print(rgbImg.shape)\n", "# print(type(rgbImg))\n", "# cv.imshow('test',rgbImg)\n", "# cv.waitKey(0)\n", "# cv.destroyAllWindows()\n", "# plt.imshow(rgbImg)\n", "# #保存\n", "# plt.savefig('result/1_ref.png')\n", "\n" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-03-18T13:06:05.055643Z", "start_time": "2024-03-18T13:06:04.869067Z" } }, "id": "3443037608cc60f6", "outputs": [] }, { "cell_type": "code", "source": [ "##合成真彩色图像\n", "#读取raw文件\n", "imagePath = 'data/数据/原光源(条光)/黄果(成熟)/1.raw' \n", "print(type(imagePath))\n", "rawImage = np.fromfile(imagePath,\"float16\")\n", "print(type(rawImage))\n", "rawShape = rawImage.shape\n", "print(rawShape)\n", "formatImage = np.zeros((110,2048,224))\n", "# 假设 rawImage 已经正确读取\n", "raw_length = len(rawImage) # 获取 rawImage 的实际长度\n", "\n", "for row in range(0, 110):\n", " for dim in range(0, 224):\n", " start_index = (dim + row*224) * 2048\n", " end_index = (dim + 1 + row*224) * 2048\n", " \n", " # 检查索引是否在 rawImage 的边界内\n", " if start_index < raw_length and end_index <= raw_length:\n", " formatImage[row,:,dim] = rawImage[start_index:end_index]\n", " else:\n", " print(f\"索引超出范围: 行 {row}, 波段 {dim}\")\n", "\n", "# for row in range(0,110):\n", "# for dim in range(0,224):\n", "# # formatImage[row,:,dim] = rawImage[(dim + row*224) * 2048:(dim + 1 + row*224)* 2048]\n", " \n", "#选择通道数为12/46/96的三个通道相当于rgb三通道的图片\n", "# imgR = formatImage[:,:,31]\n", "# imgG = formatImage[:,:,58]\n", "# imgB = formatImage[:,:,88]\n", "# \n", "# rgbImg = cv.merge([imgR,imgG,imgB])\n", "# print(rgbImg.shape)\n", "# print(type(rgbImg))\n", "# cv.imshow('test',rgbImg)\n", "# cv.waitKey(0)\n", "# cv.destroyAllWindows()\n", "# plt.imshow(rgbImg)\n", "# #保存\n", "# plt.savefig('result/1_ref.png')" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2024-03-18T03:26:37.014093Z", "start_time": "2024-03-18T03:26:36.769031Z" } }, "id": "283f370b2401221b", "execution_count": 5, "outputs": [] }, { "cell_type": "code", "execution_count": 5, "source": [ "##循环合成真彩色图像\n", "# 指定文件夹路径\n", "folder_path = 'data' # 替换成你的文件夹路径\n", "# mask_out_path = 'result' # 替换成你的掩码图像文件夹路径\n", "\n", "# 获取文件夹中的所有文件\n", "files = os.listdir(folder_path)\n", "\n", "\n", "for i in range(1, 40):\n", " with open(folder_path + '/' + str(i) + '_ref.hdr', 'r') as hdr_file:\n", " lines = hdr_file.readlines()\n", " for line in lines:\n", " if line.startswith('lines'):\n", " height = int(line.split()[-1])\n", " elif line.startswith('samples'):\n", " width = int(line.split()[-1])\n", " elif line.startswith('bands'):\n", " bands = int(line.split()[-1])\n", " raw_image = np.fromfile(folder_path + '/' + str(i) + '_ref.raw', dtype='float32')\n", " \n", " formatImage = np.zeros((height, width, bands))\n", " for row in range(0, height):\n", " for dim in range(0, bands):\n", " formatImage[row,:,dim] = raw_image[(dim + row*bands) * width:(dim + 1 + row*bands)* width]\n", " #选择通道数为12/46/96的三个通道相当于rgb三通道的图片\n", " imgR = formatImage[:,:,12]\n", " imgG = formatImage[:,:,46]\n", " imgB = formatImage[:,:,96]\n", " \n", " rgbImg = cv.merge([imgR,imgG,imgB])\n", " print(rgbImg.shape)\n", " print(type(rgbImg))\n", " \n", " Img_Name = \"./tcimage/\" + str(i)+ \".png\"\n", " cv.imwrite(Img_Name, rgbImg*255)\n", " # cv.imshow('test',rgbImg)\n", " # cv.waitKey(0)\n", " # cv.destroyAllWindows()\n", "# #读取raw文件\n", "# imagePath = 'data/1_ref.raw' \n", "# print(type(imagePath))\n", "# rawImage = np.fromfile(imagePath,\"float32\")\n", "# print(type(rawImage))\n", "# rawShape = rawImage.shape\n", "# print(rawShape)\n", "# formatImage = np.zeros((928,1200,224))\n", "# for row in range(0,928):\n", "# for dim in range(0,224):\n", "# formatImage[row,:,dim] = rawImage[(dim + row*224) * 1200:(dim + 1 + row*224)* 1200]\n", "# #选择通道数为12/46/96的三个通道相当于rgb三通道的图片\n", "# imgR = formatImage[:,:,12]\n", "# imgG = formatImage[:,:,46]\n", "# imgB = formatImage[:,:,96]\n", " \n", "# rgbImg = cv.merge([imgR,imgG,imgB])\n", "# print(rgbImg.shape)\n", "# print(type(rgbImg))\n", "# cv.imshow('test',rgbImg)\n", "# cv.waitKey(0)\n", "# cv.destroyAllWindows()\n", "# plt.imshow(rgbImg)\n", "# #保存\n", "# plt.savefig('result/1_ref.png')\n", "\n" ], "metadata": { "collapsed": false, "ExecuteTime": { "end_time": "2023-11-24T02:56:13.173734400Z", "start_time": "2023-11-24T02:50:24.958389400Z" } }, "id": "15a3889f7bf1917f", "outputs": [] }, { "cell_type": "code", "execution_count": null, "source": [], "metadata": { "collapsed": false }, "id": "17b929b3de3fa2ed", "outputs": [] }, { "cell_type": "code", "execution_count": null, "source": [], "metadata": { "collapsed": false }, "id": "e00c8e929ee57b60", "outputs": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }